Viewing file: constexpr-neg1.C (1.97 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// 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 "" }
|