@@ -36,11 +36,15 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
+ // This is used for std::experimental::erased_type from Library Fundamentals.
struct __erased_type { };
+ // This also supports the "type-erased allocator" protocol from the
+ // Library Fundamentals TS, where allocator_type is erased_type.
+ // The second condition will always be false for types not using the TS.
template<typename _Alloc, typename _Tp>
using __is_erased_or_convertible
- = __or_<is_same<_Tp, __erased_type>, is_convertible<_Alloc, _Tp>>;
+ = __or_<is_convertible<_Alloc, _Tp>, is_same<_Tp, __erased_type>>;
/// [allocator.tag]
struct allocator_arg_t { explicit allocator_arg_t() = default; };
@@ -46,5 +46,5 @@ test01()
scoped_alloc sa;
auto p = sa.allocate(1);
sa.construct(p); // this is required to be ill-formed
- // { dg-error "static assertion failed" "" { target *-*-* } 90 }
+ // { dg-error "static assertion failed" "" { target *-*-* } 94 }
}
@@ -44,5 +44,5 @@ test01()
{
alloc_type a;
std::tuple<X> t(std::allocator_arg, a); // this is required to be ill-formed
- // { dg-error "static assertion failed" "" { target *-*-* } 90 }
+ // { dg-error "static assertion failed" "" { target *-*-* } 94 }
}
@@ -43,4 +43,4 @@ void test01()
tuple<Type> t(allocator_arg, a, 1);
}
-// { dg-error "static assertion failed" "" { target *-*-* } 90 }
+// { dg-error "static assertion failed" "" { target *-*-* } 94 }