aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C')
-rw-r--r--gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C107
1 files changed, 107 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C
new file mode 100644
index 0000000..e46c46d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/g++.dg/cpp0x/error5.C
@@ -0,0 +1,107 @@
+// PR c++/49181
+// { dg-do compile { target c++11 } }
+
+namespace std
+{
+ typedef __SIZE_TYPE__ size_t;
+
+ template<typename _Tp, _Tp>
+ struct integral_constant;
+
+ template<typename _Tp, _Tp __v>
+ struct integral_constant
+ {
+ static constexpr _Tp value = __v;
+ typedef _Tp value_type;
+ typedef integral_constant<_Tp, __v> type;
+ constexpr operator value_type() { return value; }
+ };
+
+ typedef integral_constant<bool, true> true_type;
+
+ typedef integral_constant<bool, false> false_type;
+
+ template<typename _Tp, _Tp __v>
+ constexpr _Tp integral_constant<_Tp, __v>::value;
+
+ template<bool, typename _Tp = void>
+ struct enable_if
+ { };
+
+ template<typename _Tp>
+ struct enable_if<true, _Tp>
+ { typedef _Tp type; };
+
+ template<typename _Tp>
+ inline _Tp
+ declval();
+
+struct bad_alloc { };
+}
+
+void* operator new(std::size_t) throw (std::bad_alloc);
+
+namespace std
+{
+
+ template<typename _Tp>
+ class allocator
+ {
+ public:
+ typedef _Tp* pointer;
+ typedef _Tp value_type;
+
+ pointer
+ allocate(size_t, const void* = 0);
+ };
+
+ template<typename _Alloc>
+ struct allocator_traits
+ {
+ typedef typename _Alloc::value_type value_type;
+
+ template<typename _Tp> static typename _Tp::pointer
+_S_pointer_helper(_Tp*);
+ static value_type* _S_pointer_helper(...);
+ typedef decltype(_S_pointer_helper((_Alloc*)0)) __pointer;
+
+ typedef __pointer pointer;
+
+ typedef const void* const_void_pointer;
+
+ private:
+ template<typename _Alloc2>
+ struct __allocate_helper
+ {
+ template<typename _Alloc3,
+ typename = decltype(std::declval<_Alloc3*>()->allocate(
+ std::declval<size_t>(),
+ std::declval<const_void_pointer>()))>
+ static true_type __test(int);
+
+ template<typename>
+ static false_type __test(...);
+
+ typedef decltype(__test<_Alloc>(0)) type;
+ static const bool value = type::value;
+ };
+
+ template<typename _Alloc2>
+ static typename
+ enable_if<__allocate_helper<_Alloc2>::value, pointer>::type
+ _S_allocate(_Alloc2& __a, size_t __n, const_void_pointer __hint)
+ { return __a.allocate(__n, __hint); }
+
+ public:
+ static pointer
+ allocate(_Alloc& __a, size_t __n, const_void_pointer __hint)
+ { return _S_allocate(__a, __n, __hint); }
+ };
+
+}
+
+namespace std
+{
+ typedef short test_type;
+ template struct allocator_traits<allocator<test_type>>;
+}