diff options
Diffstat (limited to 'gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C')
-rw-r--r-- | gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C index fc69cfef6..5124f7c7f 100644 --- a/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C +++ b/gcc-4.6/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C @@ -22,3 +22,29 @@ struct R { }; constexpr R r; // { dg-bogus "" "" { xfail *-*-* } } + +// Ill-formed (no diagnostic required) +struct T { + int i; + constexpr int f() { return i; } + constexpr T(): i(0) { } + constexpr T(const T& t) : i(f()) { } // { dg-message "" } +}; + +constexpr T t1; +// Ill-formed (diagnostic required) +constexpr T t2(t1); // { dg-error "" } + +// Well-formed +struct U { + int i, j; + constexpr int f(int _i) { return _i; } + constexpr int g() { return i; } + constexpr U(): i(0), j(0) { } + constexpr U(const U& t) : i(f(t.i)),j(0) { } // { dg-bogus "" "" { xfail *-*-* } } + constexpr U(int _i) : i(_i),j(g()) { } // { dg-bogus "" "" { xfail *-*-* } } +}; + +constexpr U u1; +constexpr U u2(u1); // { dg-bogus "" "" { xfail *-*-* } } +constexpr U u3(1); // { dg-bogus "" "" { xfail *-*-* } } |