Viewing file: complex8.C (1.09 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// 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; }
|