Viewing file: constexpr-pos1.C (1.21 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// Positive examples from N3092 (FCD) // { dg-do compile { target c++11 } }
#define SA(X) static_assert(X, #X)
constexpr int bufsz = 1024; // OK: definition SA (bufsz == 1024);
constexpr int square(int x); // OK: declaration
struct pixel { int x; int y; // OK: declaration constexpr pixel(int); }; constexpr pixel::pixel(int a) // OK: definition : x(square(a)), y(square(a)) { }
constexpr int square(int x) // OK: definition { return x * x; }
constexpr pixel large(4); // OK: square defined SA(large.x == 16 && large.y==16);
constexpr long long_max() // OK { return 2147483647; }
SA(long_max() == 2147483647);
constexpr int abs(int x) // OK { return x < 0 ? -x : x; }
SA(abs(-1) == 1); SA(abs(24) == 24);
struct Length { explicit constexpr Length(int i = 0) : val(i) { } private: int val; };
constexpr Length l1; constexpr Length l2(12);
struct pixel2 { int x, y; }; constexpr pixel2 ur = { 1294, 1024 };// OK
SA(ur.x == 1294 && ur.y == 1024);
constexpr const int* addr(const int& ir) { return &ir; } // OK static const int x = 5; extern constexpr const int* xp = addr(x); // OK: (const int*)&(const int&)x // is an address contant expression SA(xp == &x); extern constexpr int x2 = *addr(5); SA(x2 == 5);
|