Viewing file: constexpr-init4.C (1.35 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/91353 - P1331R2: Allow trivial default init in constexpr contexts. // { dg-do compile { target c++20 } }
// This bullet in [dcl.constexpr] is now gone: // - every non-static data member and base class sub-object shall be initialized
struct A { int i; constexpr A(int _i) { i = _i; } };
struct B { int i; constexpr B() { } };
// Anonymous members. struct E { int a; union { char b; __extension__ struct { double c; long d; }; union { char e; void *f; }; }; __extension__ struct { long long g; __extension__ struct { int h; double i; }; union { char *j; E *k; }; };
// Completely initialized. constexpr E(int(&)[1]) : a(), b(), g(), h(), i(), j() {} constexpr E(int(&)[3]) : a(), e(), g(), h(), i(), k() {} constexpr E(int(&)[7]) : a(), b(), g(), h(), i(), j() {} constexpr E(int(&)[8]) : a(), f(), g(), h(), i(), k() {} constexpr E(int(&)[9]) : a(), c(), d(), g(), h(), i(), k() {}
// Missing d, i, j/k union init. constexpr E(int(&)[2]) : a(), c(), g(), h() {}
// Missing h, j/k union init. constexpr E(int(&)[4]) : a(), c(), d(), g(), i() {}
// Missing b/c/d/e/f union init. constexpr E(int(&)[5]) : a(), g(), h(), i(), k() {}
// Missing a, b/c/d/e/f union, g/h/i/j/k struct init. constexpr E(int(&)[6]) {} };
|