annotate gcc/testsuite/g++.dg/cpp0x/pr47416.C @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children 84e7813d76e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // PR c++/47416
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 template < typename _Tp, _Tp __v > struct integral_constant
kono
parents:
diff changeset
7 {
kono
parents:
diff changeset
8 static const _Tp value = __v;
kono
parents:
diff changeset
9 };
kono
parents:
diff changeset
10 typedef integral_constant < bool, false > false_type;
kono
parents:
diff changeset
11 template < typename > struct is_array:false_type
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 };
kono
parents:
diff changeset
14 template < typename > struct is_function:false_type
kono
parents:
diff changeset
15 {
kono
parents:
diff changeset
16 };
kono
parents:
diff changeset
17 template < typename _Tp > struct remove_const
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 typedef _Tp type;
kono
parents:
diff changeset
20 };
kono
parents:
diff changeset
21 template < typename _Tp > struct remove_volatile
kono
parents:
diff changeset
22 {
kono
parents:
diff changeset
23 typedef _Tp type;
kono
parents:
diff changeset
24 };
kono
parents:
diff changeset
25 template < typename _Tp > struct remove_cv
kono
parents:
diff changeset
26 {
kono
parents:
diff changeset
27 typedef typename remove_const < typename remove_volatile <
kono
parents:
diff changeset
28 _Tp >::type >::type type;
kono
parents:
diff changeset
29 };
kono
parents:
diff changeset
30 template < typename > struct remove_reference
kono
parents:
diff changeset
31 {
kono
parents:
diff changeset
32 };
kono
parents:
diff changeset
33 template < typename _Tp > struct remove_reference <_Tp & >
kono
parents:
diff changeset
34 {
kono
parents:
diff changeset
35 typedef _Tp type;
kono
parents:
diff changeset
36 };
kono
parents:
diff changeset
37 template < typename _Up, bool = is_array < _Up >::value, bool =
kono
parents:
diff changeset
38 is_function < _Up >::value > struct __decay_selector;
kono
parents:
diff changeset
39 template < typename _Up > struct __decay_selector <_Up, false, false >
kono
parents:
diff changeset
40 {
kono
parents:
diff changeset
41 typedef typename remove_cv < _Up >::type __type;
kono
parents:
diff changeset
42 };
kono
parents:
diff changeset
43 template < typename _Tp > class decay
kono
parents:
diff changeset
44 {
kono
parents:
diff changeset
45 typedef typename remove_reference < _Tp >::type __remove_type;
kono
parents:
diff changeset
46 public:typedef typename __decay_selector <
kono
parents:
diff changeset
47 __remove_type >::__type type;
kono
parents:
diff changeset
48 };
kono
parents:
diff changeset
49 template < typename _Tp > struct __strip_reference_wrapper
kono
parents:
diff changeset
50 {
kono
parents:
diff changeset
51 typedef _Tp __type;
kono
parents:
diff changeset
52 };
kono
parents:
diff changeset
53 template < typename _Tp > struct __decay_and_strip
kono
parents:
diff changeset
54 {
kono
parents:
diff changeset
55 typedef typename __strip_reference_wrapper < typename decay <
kono
parents:
diff changeset
56 _Tp >::type >::__type __type;
kono
parents:
diff changeset
57 };
kono
parents:
diff changeset
58 template < typename _Tp > _Tp forward (typename remove_reference <
kono
parents:
diff changeset
59 _Tp >::type &)
kono
parents:
diff changeset
60 {
kono
parents:
diff changeset
61 }
kono
parents:
diff changeset
62 template < class _T1, class _T2 > struct pair
kono
parents:
diff changeset
63 {
kono
parents:
diff changeset
64 _T1 first;
kono
parents:
diff changeset
65 _T2 second;
kono
parents:
diff changeset
66 constexpr pair (_T1, _T2 &):first (), second (__b) // { dg-error "was not declared in this scope" }
kono
parents:
diff changeset
67 {
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69 };
kono
parents:
diff changeset
70 template < class _T1,
kono
parents:
diff changeset
71 class _T2 > pair < typename __decay_and_strip < _T1 >::__type,
kono
parents:
diff changeset
72 typename __decay_and_strip < _T2 >::__type > make_pair (_T1 && __x, _T2
kono
parents:
diff changeset
73 && __y)
kono
parents:
diff changeset
74 {
kono
parents:
diff changeset
75 typedef typename __decay_and_strip < _T1 >::__type __ds_type1;
kono
parents:
diff changeset
76 typedef typename __decay_and_strip < _T2 >::__type __ds_type2;
kono
parents:
diff changeset
77 typedef pair < __ds_type1, __ds_type2 > __pair_type;
kono
parents:
diff changeset
78 __pair_type (forward < _T1 > (__x), std::forward < _T2 > (__y));
kono
parents:
diff changeset
79 }
kono
parents:
diff changeset
80 }
kono
parents:
diff changeset
81
kono
parents:
diff changeset
82 typedef long size_t;
kono
parents:
diff changeset
83 namespace std
kono
parents:
diff changeset
84 {
kono
parents:
diff changeset
85 template < typename > class allocator;
kono
parents:
diff changeset
86 template < class > struct char_traits;
kono
parents:
diff changeset
87 template < typename _CharT, typename = char_traits < _CharT >, typename =
kono
parents:
diff changeset
88 allocator < _CharT > >class basic_string;
kono
parents:
diff changeset
89 typedef basic_string < char >string;
kono
parents:
diff changeset
90 }
kono
parents:
diff changeset
91 namespace __gnu_cxx
kono
parents:
diff changeset
92 {
kono
parents:
diff changeset
93 template < bool > class __pool;
kono
parents:
diff changeset
94 template < template < bool > class, bool > struct __common_pool
kono
parents:
diff changeset
95 {
kono
parents:
diff changeset
96 };
kono
parents:
diff changeset
97 template < template < bool > class, bool > struct __common_pool_base;
kono
parents:
diff changeset
98 template < template < bool > class _PoolTp >
kono
parents:
diff changeset
99 struct __common_pool_base <_PoolTp, true >:__common_pool < _PoolTp, true >
kono
parents:
diff changeset
100 {
kono
parents:
diff changeset
101 };
kono
parents:
diff changeset
102 template < template < bool > class _PoolTp,
kono
parents:
diff changeset
103 bool _Thread > struct __common_pool_policy:__common_pool_base < _PoolTp,
kono
parents:
diff changeset
104 _Thread >
kono
parents:
diff changeset
105 {
kono
parents:
diff changeset
106 template < typename, template < bool > class _PoolTp1 =
kono
parents:
diff changeset
107 _PoolTp, bool _Thread1 = _Thread > struct _M_rebind
kono
parents:
diff changeset
108 {
kono
parents:
diff changeset
109 typedef __common_pool_policy < _PoolTp1, _Thread1 > other;
kono
parents:
diff changeset
110 };
kono
parents:
diff changeset
111 };
kono
parents:
diff changeset
112 template < typename _Tp > class __mt_alloc_base
kono
parents:
diff changeset
113 {
kono
parents:
diff changeset
114 };
kono
parents:
diff changeset
115 template < typename _Tp, typename _Poolp = __common_pool_policy < __pool, true > >class __mt_alloc:public __mt_alloc_base <
kono
parents:
diff changeset
116 _Tp
kono
parents:
diff changeset
117 >
kono
parents:
diff changeset
118 {
kono
parents:
diff changeset
119 public:size_t size_type;
kono
parents:
diff changeset
120 typedef _Tp value_type;
kono
parents:
diff changeset
121 template < typename _Tp1, typename _Poolp1 = _Poolp > struct rebind
kono
parents:
diff changeset
122 {
kono
parents:
diff changeset
123 typedef typename _Poolp1::template _M_rebind < _Tp1 >::other pol_type;
kono
parents:
diff changeset
124 typedef __mt_alloc < _Tp1, pol_type > other;
kono
parents:
diff changeset
125 };
kono
parents:
diff changeset
126 };
kono
parents:
diff changeset
127 }
kono
parents:
diff changeset
128
kono
parents:
diff changeset
129 namespace std
kono
parents:
diff changeset
130 {
kono
parents:
diff changeset
131 template < typename _Tp > class allocator:public __gnu_cxx::__mt_alloc <
kono
parents:
diff changeset
132 _Tp >
kono
parents:
diff changeset
133 {
kono
parents:
diff changeset
134 };
kono
parents:
diff changeset
135 template < typename, typename > struct unary_function
kono
parents:
diff changeset
136 {
kono
parents:
diff changeset
137 };
kono
parents:
diff changeset
138 template < typename, typename, typename > struct binary_function
kono
parents:
diff changeset
139 {
kono
parents:
diff changeset
140 };
kono
parents:
diff changeset
141 template < typename _Tp > struct equal_to:binary_function < _Tp, _Tp, bool >
kono
parents:
diff changeset
142 {
kono
parents:
diff changeset
143 };
kono
parents:
diff changeset
144 }
kono
parents:
diff changeset
145
kono
parents:
diff changeset
146 namespace boost
kono
parents:
diff changeset
147 {
kono
parents:
diff changeset
148 template < class > struct hash;
kono
parents:
diff changeset
149 template < class K, class T, class = hash < K >, class =
kono
parents:
diff changeset
150 std::equal_to < K >, class =
kono
parents:
diff changeset
151 std::allocator < std::pair < const K, T > >>class unordered_map;
kono
parents:
diff changeset
152 template < >struct hash <std::string >:std::unary_function < std::string,
kono
parents:
diff changeset
153 size_t >
kono
parents:
diff changeset
154 {
kono
parents:
diff changeset
155 };
kono
parents:
diff changeset
156 namespace unordered_detail
kono
parents:
diff changeset
157 {
kono
parents:
diff changeset
158 template < class Alloc, class T > struct rebind_wrap
kono
parents:
diff changeset
159 {
kono
parents:
diff changeset
160 typedef typename Alloc::template rebind < T >::other type;
kono
parents:
diff changeset
161 };
kono
parents:
diff changeset
162 }
kono
parents:
diff changeset
163 namespace unordered_detail
kono
parents:
diff changeset
164 {
kono
parents:
diff changeset
165 size_t default_bucket_count;
kono
parents:
diff changeset
166 template < class, class > struct map_extractor;
kono
parents:
diff changeset
167 struct ungrouped
kono
parents:
diff changeset
168 {
kono
parents:
diff changeset
169 };
kono
parents:
diff changeset
170 template < class T > class hash_table:T::buckets, T::buffered_functions
kono
parents:
diff changeset
171 {
kono
parents:
diff changeset
172 };
kono
parents:
diff changeset
173 template < class, class, class H, class P, class A, class, class G > struct types
kono
parents:
diff changeset
174 {
kono
parents:
diff changeset
175 typedef H hasher;
kono
parents:
diff changeset
176 typedef P key_equal;
kono
parents:
diff changeset
177 typedef A value_allocator;
kono
parents:
diff changeset
178 };
kono
parents:
diff changeset
179 template < class T > class hash_unique_table:T
kono
parents:
diff changeset
180 {
kono
parents:
diff changeset
181 public:typedef typename T::hasher hasher;
kono
parents:
diff changeset
182 typedef typename T::key_equal key_equal;
kono
parents:
diff changeset
183 typedef typename T::value_allocator value_allocator;
kono
parents:
diff changeset
184 typedef typename T::table table;
kono
parents:
diff changeset
185 hash_unique_table (size_t n, hasher, key_equal,
kono
parents:
diff changeset
186 value_allocator & a):table (n, a) // { dg-error "is not a direct base" }
kono
parents:
diff changeset
187 {
kono
parents:
diff changeset
188 }
kono
parents:
diff changeset
189 };
kono
parents:
diff changeset
190 template < class K, class H, class P, class A > struct map:types < K,
kono
parents:
diff changeset
191 typename A::value_type, H, P, A, map_extractor < K,
kono
parents:
diff changeset
192 typename A::value_type >, ungrouped >
kono
parents:
diff changeset
193 {
kono
parents:
diff changeset
194 typedef hash_unique_table < map < K, H, P, A > >impl;
kono
parents:
diff changeset
195 typedef hash_table < map < K, H, P, A > >table;
kono
parents:
diff changeset
196 };
kono
parents:
diff changeset
197 }
kono
parents:
diff changeset
198 template < class K, class T, class H, class P, class A > class unordered_map
kono
parents:
diff changeset
199 {
kono
parents:
diff changeset
200 typedef std::pair < const K, T > value_type;
kono
parents:
diff changeset
201 typedef H hasher;
kono
parents:
diff changeset
202 typedef P key_equal;
kono
parents:
diff changeset
203 typedef A allocator_type;
kono
parents:
diff changeset
204 typedef typename unordered_detail::rebind_wrap < allocator_type,
kono
parents:
diff changeset
205 value_type >::type value_allocator;
kono
parents:
diff changeset
206 typedef boost::unordered_detail::map < K, H, P, value_allocator > types;
kono
parents:
diff changeset
207 typedef typename types::impl table;
kono
parents:
diff changeset
208 typedef size_t size_type;
kono
parents:
diff changeset
209 private:table table_;
kono
parents:
diff changeset
210 public: unordered_map (size_type n = boost::unordered_detail::default_bucket_count,
kono
parents:
diff changeset
211 hasher hf = hasher (), key_equal eql = key_equal (),
kono
parents:
diff changeset
212 allocator_type a = allocator_type ()):table_ (n, hf, eql, a) // { dg-message "required" }
kono
parents:
diff changeset
213 {
kono
parents:
diff changeset
214 }
kono
parents:
diff changeset
215 };
kono
parents:
diff changeset
216 }
kono
parents:
diff changeset
217
kono
parents:
diff changeset
218 void
kono
parents:
diff changeset
219 foo (const int &a)
kono
parents:
diff changeset
220 {
kono
parents:
diff changeset
221 typedef boost::unordered_map < std::string, int >Name2Port;
kono
parents:
diff changeset
222 Name2Port b; // { dg-message "required" }
kono
parents:
diff changeset
223 std::make_pair (a, b);
kono
parents:
diff changeset
224 }