// Negative examples from N3092 (FCD) // { dg-do compile { target c++11 } } // OK: declaration constexpr int square(int x); // { dg-message "never defined" } // error: pixel is a type constexpr struct pixel { // { dg-error ".constexpr." } int x; int y; // OK: declaration constexpr pixel(int); }; constexpr pixel::pixel(int a) // OK: definition : x(square(a)), y(square(a)) // { dg-error "square" } { } // error: square not defined, so small(2) not constant (5.19), so constexpr // not satisfied constexpr pixel small(2); // { dg-message "in .constexpr. expansion of " } // error: not for parameters int next(constexpr int x) { // { dg-error "parameter" } return x + 1; } // error: not a definition extern constexpr int memsz; // { dg-error "definition" } // error: return type is void constexpr void f(int x) // { dg-error "void" "" { target c++11_only } } { /* ... */ } // error: use of decrement constexpr int prev(int x) { return --x; } // { dg-error "-- x" "" { target c++11_only } } // error: body not just return expr constexpr int g(int x, int n) { int r = 1; while (--n > 0) r *= x; return r; } // { dg-error "body of .constexpr. function" "" { target c++11_only } } class debug_flag { public: explicit debug_flag(bool); constexpr bool is_on(); // { dg-error "not a literal type" "" { target c++11_only } } debug_flag not literal type private: bool flag; }; // OK constexpr int bar(int x, int y) // { dg-message "previously defined here" } { return x + y + x*y; } // ... // error: redefinition of bar int bar(int x, int y) // { dg-error "redefinition" } { return x * 2 + 3 * y; } struct pixel2 { // { dg-message "no user-provided default constructor" } int x, y; }; constexpr pixel2 ur = { 1294, 1024 };// OK constexpr pixel2 origin; // { dg-error "uninitialized 'const" } constexpr const int* addr(const int& ir) { return &ir; } // OK // error, initializer for constexpr variable not a constant extern constexpr const int* tp = addr(5); // { dg-error "" }