1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
// P2128R6
// { dg-do run }
// { dg-options "-std=c++23" }
// { dg-skip-if "requires hosted libstdc++ for cstdlib abort" { ! hostedlib } }
#include <initializer_list>
#include <cstdlib>
struct S
{
S () : a {} {};
int &operator[] (std::initializer_list<int> l, std::initializer_list<int> m) {
int sum = 0;
for (auto x : l)
sum += x;
for (auto x : m)
sum += x;
return a[sum];
}
int a[64];
};
int
main ()
{
S s;
if (&s[{0}, {3, 1, 2}] != &s.a[0 + 3 + 1 + 2]
|| &s[{42}, {11, 1}] != &s.a[42 + 11 + 1]
|| &s[{5, 7, 9}, {3}] != &s.a[5 + 7 + 9 + 3]
|| &s[{1, 2, 3, 4}, {3, 5, 8}] != &s.a[1 + 2 + 3 + 4 + 3 + 5 + 8])
abort ();
}
|