blob: 4d79cc645d14a525a0d344a995668e18135f2c0e [file] [log] [blame]
// PR libstdc++/48760
// { dg-do run { target c++11 } }
constexpr _Complex int i{1,2};
constexpr _Complex int j{3};
#define SA(X) static_assert((X),#X)
SA(__real i == 1);
SA(__imag i == 2);
SA(__real j == 3);
SA(__imag j == 0);
struct A
{
_Complex int c;
constexpr A(int i, int j): c{i,j} { }
constexpr A(int i): c{i} { }
};
constexpr A a1(1,2);
constexpr A a2(3);
SA(__real a1.c == 1);
SA(__imag a1.c == 2);
SA(__real a2.c == 3);
SA(__imag a2.c == 0);
typedef _Complex int ci;
SA((__real ci{1,2} == 1));
SA((__imag ci{1,2} == 2));
SA((__real ci{3} == 3));
SA((__imag ci{3} == 0));
struct B
{
_Complex int c;
int i;
};
constexpr B b1 = { { 1,2 }, 42 };
constexpr B b2 = { { 3 }, 24 };
// No brace elision for complex.
constexpr B b3 = { 5, 6 };
SA(__real b1.c == 1);
SA(__imag b1.c == 2);
SA(b1.i == 42);
SA(__real b2.c == 3);
SA(__imag b2.c == 0);
SA(b2.i == 24);
SA(__real b3.c == 5);
SA(__imag b3.c == 0);
SA(b3.i == 6);
int main()
{
ci* p = new ci{1,2};
if (__real *p != 1 || __imag *p != 2)
return 1;
delete p;
p = new ci{3};
if (__real *p != 3 || __imag *p != 0)
return 1;
}