111
|
1 // PR libstdc++/48760
|
|
2 // { dg-do run { target c++11 } }
|
|
3
|
|
4 constexpr _Complex int i{1,2};
|
|
5 constexpr _Complex int j{3};
|
|
6
|
|
7 #define SA(X) static_assert((X),#X)
|
|
8
|
|
9 SA(__real i == 1);
|
|
10 SA(__imag i == 2);
|
|
11 SA(__real j == 3);
|
|
12 SA(__imag j == 0);
|
|
13
|
|
14 struct A
|
|
15 {
|
|
16 _Complex int c;
|
|
17 constexpr A(int i, int j): c{i,j} { }
|
|
18 constexpr A(int i): c{i} { }
|
|
19 };
|
|
20
|
|
21 constexpr A a1(1,2);
|
|
22 constexpr A a2(3);
|
|
23
|
|
24 SA(__real a1.c == 1);
|
|
25 SA(__imag a1.c == 2);
|
|
26 SA(__real a2.c == 3);
|
|
27 SA(__imag a2.c == 0);
|
|
28
|
|
29 typedef _Complex int ci;
|
|
30
|
|
31 SA((__real ci{1,2} == 1));
|
|
32 SA((__imag ci{1,2} == 2));
|
|
33 SA((__real ci{3} == 3));
|
|
34 SA((__imag ci{3} == 0));
|
|
35
|
|
36 struct B
|
|
37 {
|
|
38 _Complex int c;
|
|
39 int i;
|
|
40 };
|
|
41
|
|
42 constexpr B b1 = { { 1,2 }, 42 };
|
|
43 constexpr B b2 = { { 3 }, 24 };
|
|
44 // No brace elision for complex.
|
|
45 constexpr B b3 = { 5, 6 };
|
|
46
|
|
47 SA(__real b1.c == 1);
|
|
48 SA(__imag b1.c == 2);
|
|
49 SA(b1.i == 42);
|
|
50 SA(__real b2.c == 3);
|
|
51 SA(__imag b2.c == 0);
|
|
52 SA(b2.i == 24);
|
|
53 SA(__real b3.c == 5);
|
|
54 SA(__imag b3.c == 0);
|
|
55 SA(b3.i == 6);
|
|
56
|
|
57 int main()
|
|
58 {
|
|
59 ci* p = new ci{1,2};
|
|
60 if (__real *p != 1 || __imag *p != 2)
|
|
61 return 1;
|
|
62 delete p;
|
|
63 p = new ci{3};
|
|
64 if (__real *p != 3 || __imag *p != 0)
|
|
65 return 1;
|
|
66 }
|