annotate gcc/testsuite/g++.dg/cpp0x/error5.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR c++/49181
kono
parents:
diff changeset
2 // { dg-do compile { target c++11 } }
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 namespace std
kono
parents:
diff changeset
5 {
kono
parents:
diff changeset
6 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 template<typename _Tp, _Tp>
kono
parents:
diff changeset
9 struct integral_constant;
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 template<typename _Tp, _Tp __v>
kono
parents:
diff changeset
12 struct integral_constant
kono
parents:
diff changeset
13 {
kono
parents:
diff changeset
14 static constexpr _Tp value = __v;
kono
parents:
diff changeset
15 typedef _Tp value_type;
kono
parents:
diff changeset
16 typedef integral_constant<_Tp, __v> type;
kono
parents:
diff changeset
17 constexpr operator value_type() { return value; }
kono
parents:
diff changeset
18 };
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 typedef integral_constant<bool, true> true_type;
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 typedef integral_constant<bool, false> false_type;
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 template<typename _Tp, _Tp __v>
kono
parents:
diff changeset
25 constexpr _Tp integral_constant<_Tp, __v>::value;
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 template<bool, typename _Tp = void>
kono
parents:
diff changeset
28 struct enable_if
kono
parents:
diff changeset
29 { };
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 template<typename _Tp>
kono
parents:
diff changeset
32 struct enable_if<true, _Tp>
kono
parents:
diff changeset
33 { typedef _Tp type; };
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 template<typename _Tp>
kono
parents:
diff changeset
36 inline _Tp
kono
parents:
diff changeset
37 declval();
kono
parents:
diff changeset
38
kono
parents:
diff changeset
39 struct bad_alloc { };
kono
parents:
diff changeset
40 }
kono
parents:
diff changeset
41
kono
parents:
diff changeset
42 void* operator new(std::size_t)
kono
parents:
diff changeset
43 #if __cplusplus <= 201402L
kono
parents:
diff changeset
44 throw (std::bad_alloc) // { dg-warning "deprecated" "" { target { ! c++17 } } }
kono
parents:
diff changeset
45 #endif
kono
parents:
diff changeset
46 ;
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 namespace std
kono
parents:
diff changeset
49 {
kono
parents:
diff changeset
50
kono
parents:
diff changeset
51 template<typename _Tp>
kono
parents:
diff changeset
52 class allocator
kono
parents:
diff changeset
53 {
kono
parents:
diff changeset
54 public:
kono
parents:
diff changeset
55 typedef _Tp* pointer;
kono
parents:
diff changeset
56 typedef _Tp value_type;
kono
parents:
diff changeset
57
kono
parents:
diff changeset
58 pointer
kono
parents:
diff changeset
59 allocate(size_t, const void* = 0);
kono
parents:
diff changeset
60 };
kono
parents:
diff changeset
61
kono
parents:
diff changeset
62 template<typename _Alloc>
kono
parents:
diff changeset
63 struct allocator_traits
kono
parents:
diff changeset
64 {
kono
parents:
diff changeset
65 typedef typename _Alloc::value_type value_type;
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 template<typename _Tp> static typename _Tp::pointer
kono
parents:
diff changeset
68 _S_pointer_helper(_Tp*);
kono
parents:
diff changeset
69 static value_type* _S_pointer_helper(...);
kono
parents:
diff changeset
70 typedef decltype(_S_pointer_helper((_Alloc*)0)) __pointer;
kono
parents:
diff changeset
71
kono
parents:
diff changeset
72 typedef __pointer pointer;
kono
parents:
diff changeset
73
kono
parents:
diff changeset
74 typedef const void* const_void_pointer;
kono
parents:
diff changeset
75
kono
parents:
diff changeset
76 private:
kono
parents:
diff changeset
77 template<typename _Alloc2>
kono
parents:
diff changeset
78 struct __allocate_helper
kono
parents:
diff changeset
79 {
kono
parents:
diff changeset
80 template<typename _Alloc3,
kono
parents:
diff changeset
81 typename = decltype(std::declval<_Alloc3*>()->allocate(
kono
parents:
diff changeset
82 std::declval<size_t>(),
kono
parents:
diff changeset
83 std::declval<const_void_pointer>()))>
kono
parents:
diff changeset
84 static true_type __test(int);
kono
parents:
diff changeset
85
kono
parents:
diff changeset
86 template<typename>
kono
parents:
diff changeset
87 static false_type __test(...);
kono
parents:
diff changeset
88
kono
parents:
diff changeset
89 typedef decltype(__test<_Alloc>(0)) type;
kono
parents:
diff changeset
90 static const bool value = type::value;
kono
parents:
diff changeset
91 };
kono
parents:
diff changeset
92
kono
parents:
diff changeset
93 template<typename _Alloc2>
kono
parents:
diff changeset
94 static typename
kono
parents:
diff changeset
95 enable_if<__allocate_helper<_Alloc2>::value, pointer>::type
kono
parents:
diff changeset
96 _S_allocate(_Alloc2& __a, size_t __n, const_void_pointer __hint)
kono
parents:
diff changeset
97 { return __a.allocate(__n, __hint); }
kono
parents:
diff changeset
98
kono
parents:
diff changeset
99 public:
kono
parents:
diff changeset
100 static pointer
kono
parents:
diff changeset
101 allocate(_Alloc& __a, size_t __n, const_void_pointer __hint)
kono
parents:
diff changeset
102 { return _S_allocate(__a, __n, __hint); }
kono
parents:
diff changeset
103 };
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 }
kono
parents:
diff changeset
106
kono
parents:
diff changeset
107 namespace std
kono
parents:
diff changeset
108 {
kono
parents:
diff changeset
109 typedef short test_type;
kono
parents:
diff changeset
110 template struct allocator_traits<allocator<test_type>>;
kono
parents:
diff changeset
111 }