1 #include <vector>
2 #include <algorithm>
3
4 using some_type = int;
5 namespace Ns {
6 using some_type = int;
7 }
8
9 class BracedInitListBase {
10 public:
BracedInitListBase()11 BracedInitListBase()
12 : a{int{1}},
13 b(int(some_type(1))),
14 c(int{some_type(1)}),
15 d{int(some_type(1))},
16 e{some_type{some_type{a}}}
17 {
18 }
19
getA() const20 virtual int getA() const {
21 return a;
22 }
23 private:
24 int a{};
25 int b{1};
26 int c = {1};
27 int d = int{1};
28 some_type e{1};
29 some_type f = {1};
30 some_type g = some_type{1};
31 std::vector<some_type> h{some_type{4}, 5};
32 ::std::vector<some_type> i = ::std::vector<some_type>{4, some_type{5}};
33 some_type j = ::std::vector<some_type>{4, some_type{5}}[1];
34 some_type k[2]{1, 2};
35 some_type l[2] = {1, 2};
36
37 union SomeUnion {
38 int a;
39 some_type b{};
40 };
41 };
42
43 class BracedInitListDerived : public BracedInitListBase {
44 public:
getA() const45 int getA() const override {
46 return BracedInitListBase::getA();
47 }
48 };
49
inc(some_type a)50 some_type inc(some_type a)
51 {
52 return some_type{++a};
53 }
54
sum(some_type a,some_type b=some_type{1})55 some_type sum(some_type a, some_type b = some_type{1})
56 {
57 return a + inc(some_type{b - some_type{1}});
58 }
59
braced_init_list_int()60 void braced_init_list_int()
61 {
62 {
63 int a{};
64 int b = {};
65 int c = int{};
66 int d = int{int{}};
67 int{};
68 int{int{}};
69 }
70 {
71 int a{1};
72 int b = {1};
73 int c = int{1};
74 int d = int{int{1}};
75 int{1};
76 int{int{1}};
77 }
78 }
79
braced_init_list_some_type()80 void braced_init_list_some_type()
81 {
82 {
83 some_type a{};
84 some_type b = {};
85 some_type c = some_type{};
86 some_type d = some_type{some_type{}};
87 some_type{};
88 some_type{some_type{}};
89 }
90 {
91 some_type a{1};
92 some_type b = {1};
93 some_type c = some_type{1};
94 some_type d = some_type{some_type{1}};
95 some_type{1};
96 some_type{some_type{1}};
97 }
98 {
99 ::some_type a{1};
100 ::some_type b = {1};
101 ::some_type c = ::some_type{1};
102 ::some_type d = ::some_type{::some_type{1}};
103 ::some_type{1};
104 ::some_type{::some_type{1}};
105 }
106 {
107 Ns::some_type a{1};
108 Ns::some_type b = {1};
109 Ns::some_type c = Ns::some_type{1};
110 Ns::some_type d = Ns::some_type{Ns::some_type{1}};
111 Ns::some_type{1};
112 Ns::some_type{Ns::some_type{1}};
113 }
114 {
115 ::Ns::some_type a{1};
116 ::Ns::some_type b = {1};
117 ::Ns::some_type c = ::Ns::some_type{1};
118 ::Ns::some_type d = ::Ns::some_type{::Ns::some_type{1}};
119 ::Ns::some_type{1};
120 ::Ns::some_type{::Ns::some_type{1}};
121 }
122 }
123
braced_init_list_some_type_auto()124 void braced_init_list_some_type_auto()
125 {
126 {
127 auto b = some_type{};
128 auto c = some_type{some_type{}};
129 }
130 {
131 auto a = {1};
132 auto b = some_type{1};
133 auto c = some_type{some_type{1}};
134 }
135 {
136 auto b = ::some_type{1};
137 auto c = ::some_type{::some_type{1}};
138 }
139 {
140 auto b = Ns::some_type{1};
141 auto c = Ns::some_type{Ns::some_type{1}};
142 }
143 {
144 auto b = ::Ns::some_type{1};
145 auto c = ::Ns::some_type{::Ns::some_type{1}};
146 }
147 }
148
braced_init_list_function_call()149 void braced_init_list_function_call()
150 {
151 {
152 some_type a{sum(some_type{}, some_type{})};
153 some_type b = sum(some_type{}, some_type{});
154 some_type c = some_type{sum(some_type{}, some_type{})};
155 some_type{sum(some_type{}, some_type{})};
156 some_type{some_type{sum(some_type{}, some_type{})}};
157 }
158 {
159 some_type a{sum(some_type{1}, some_type{1})};
160 some_type b = sum(some_type{1}, some_type{1});
161 some_type c = some_type{sum(some_type{1}, some_type{1})};
162 some_type{sum(some_type{a}, some_type{b})};
163 some_type{some_type{sum(some_type{a}, some_type{b})}};
164 }
165 {
166 ::some_type a{sum(::some_type{1}, ::some_type{1})};
167 ::some_type b = sum(::some_type{1}, ::some_type{1});
168 ::some_type c = ::some_type{sum(::some_type{1}, ::some_type{1})};
169 ::some_type{sum(::some_type{a}, ::some_type{b})};
170 ::some_type{::some_type{sum(::some_type{a}, ::some_type{b})}};
171 }
172 {
173 Ns::some_type a{sum(Ns::some_type{1}, Ns::some_type{1})};
174 Ns::some_type b = sum(Ns::some_type{1}, Ns::some_type{1});
175 Ns::some_type c = Ns::some_type{sum(Ns::some_type{1}, Ns::some_type{1})};
176 Ns::some_type{sum(Ns::some_type{a}, Ns::some_type{b})};
177 Ns::some_type{Ns::some_type{sum(Ns::some_type{a}, Ns::some_type{b})}};
178 }
179 {
180 ::Ns::some_type a{sum(::Ns::some_type{1}, ::Ns::some_type{1})};
181 ::Ns::some_type b = sum(::Ns::some_type{1}, ::Ns::some_type{1});
182 ::Ns::some_type c = ::Ns::some_type{sum(::Ns::some_type{1}, ::Ns::some_type{1})};
183 ::Ns::some_type{sum(::Ns::some_type{a}, ::Ns::some_type{b})};
184 ::Ns::some_type{::Ns::some_type{sum(::Ns::some_type{a}, ::Ns::some_type{b})}};
185 }
186 }
187
braced_init_list_function_call_newline()188 void braced_init_list_function_call_newline()
189 {
190 {
191 some_type a{
192 sum(some_type{},
193 some_type{}
194 )
195 };
196 some_type b = sum(
197 some_type{}, some_type{});
198 some_type c = some_type{
199 sum(
200 some_type{}, some_type{})};
201 some_type
202 {sum
203 (some_type{},
204 some_type{}
205 )
206 };
207 some_type
208 {some_type{sum
209 (some_type{}, some_type{})}};
210 }
211 }
212
braced_init_list_array()213 void braced_init_list_array()
214 {
215 {
216 some_type a[]{};
217 some_type b[] = {};
218 some_type c[] = {{}, {}};
219 }
220 {
221 some_type a[]{1, 2};
222 some_type b[] = {1, 2};
223 some_type c[] = {some_type{1}, some_type{2}};
224 }
225 }
226
braced_init_list_template()227 void braced_init_list_template()
228 {
229 {
230 std::vector<some_type> a{};
231 std::vector<some_type> b = {};
232 std::vector<some_type> c = {{}, {}};
233 std::vector<some_type> d = std::vector<some_type>{};
234 std::vector<some_type> e = std::vector<some_type>{{}, {}};
235 std::vector<some_type> f = std::vector<some_type>{some_type{}, some_type{}};
236 std::vector<some_type>{};
237 std::vector<some_type>{{}, {}};
238 std::vector<some_type>{some_type{}, some_type{}};
239 }
240 {
241 std::vector<some_type> a{1, 2};
242 std::vector<some_type> b = {1, 2};
243 std::vector<some_type> c = std::vector<some_type>{1, 2};
244 std::vector<some_type> d = std::vector<some_type>{some_type{1}, some_type{2}};
245 std::vector<some_type>{1, 2};
246 std::vector<some_type>{some_type{1}, some_type{2}};
247 }
248 }
249
braced_init_list_lambda()250 void braced_init_list_lambda()
251 {
252 std::vector<some_type> a{1, 2};
253 some_type b{2};
254
255 auto c = []{return true;};
256 auto d = [](){return true;};
257
258 std::find_if(a.begin(), a.end(), [&b](const some_type &v){return v == b;});
259 std::find_if(a.begin(), a.end(), [](const some_type &v){some_type b{2}; return v == b;});
260 }
261