Viewing file: constexpr-89074-3.C (2.48 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/89074 // { dg-do compile { target c++14 } }
int fn1 (void) { return 0; } int fn2 (void) { return 1; }
constexpr bool f1 () { char a[] = { 1, 2, 3, 4 };
if (&a[1] == "foo") return false;
if (&a[1] == &"foo"[4]) return false;
if (&"foo"[1] == &a[0]) return false;
if (&"foo"[3] == &a[4]) return false;
if (&a[0] == "foo") return false;
// Pointer to start of one object (var) and end of another one (literal) if (&a[0] == &"foo"[4]) // { dg-error "is not a constant expression" } return false;
return true; }
constexpr bool f2 () { char a[] = { 1, 2, 3, 4 };
// Pointer to end of one object (var) and start of another one (literal) if (&a[4] == "foo") // { dg-error "is not a constant expression" } return false;
return true; }
char v[] = { 1, 2, 3, 4 };
constexpr bool f3 () { char a[] = { 1, 2, 3, 4 };
if (&a[1] == &v[1]) return false;
if (&a[0] == &v[3]) return false;
if (&a[2] == &v[4]) return false;
// Pointer to start of one object (automatic var) and end of another one (non-automagic var) if (&a[0] == &v[4]) // { dg-error "is not a constant expression" } return false;
return true; }
constexpr bool f4 () { char a[] = { 1, 2, 3, 4, 5 };
// Pointer to end of one object (automatic var) and start of another one (non-automagic var) if (&a[5] == &v[0]) // { dg-error "is not a constant expression" } return false;
return true; }
constexpr bool f5 () { if (fn1 != fn1) return false;
if (fn1 == fn2) return false;
if (&"abcde"[0] == &"edcba"[1]) return false;
if (&"abcde"[1] == &"edcba"[6]) return false;
// Pointer to start of one object (literal) and end of another one (literal) if (&"abcde"[0] == &"edcba"[6]) // { dg-error "is not a constant expression" } return false;
return true; }
constexpr bool f6 () { // Pointer to start of one object (literal) and end of another one (literal) if (&"abcde"[6] == &"edcba"[0]) // { dg-error "is not a constant expression" } return false;
return true; }
constexpr bool f7 () { if (&"abcde"[3] == &"fabcde"[3]) return false;
// These could be suffix merged, with &"abcde"[0] == &"fabcde"[1]. if (&"abcde"[3] == &"fabcde"[4]) // { dg-error "is not a constant expression" } return false;
return true; }
constexpr bool a = f1 (); constexpr bool b = f2 (); constexpr bool c = f3 (); constexpr bool d = f4 (); constexpr bool e = f5 (); constexpr bool f = f6 (); constexpr bool g = f7 ();
|