Instead of defining is_reference in terms of is_[lr]value_reference,
just define it directly.
libstdc++-v3/ChangeLog:
* include/std/type_traits (is_reference): Make the primary
template derive from false_type. Define two partial
specializations that derive from true_type.
/// is_reference
template<typename _Tp>
struct is_reference
- : public __or_<is_lvalue_reference<_Tp>,
- is_rvalue_reference<_Tp>>::type
+ : public false_type
+ { };
+
+ template<typename _Tp>
+ struct is_reference<_Tp&>
+ : public true_type
+ { };
+
+ template<typename _Tp>
+ struct is_reference<_Tp&&>
+ : public true_type
{ };
/// is_arithmetic