diff options
author | Jason Merrill <jason@redhat.com> | 2016-04-14 22:23:05 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2016-04-14 22:23:05 -0400 |
commit | 26144dde3b68a331a8db86a9c8eaaa63d572bce9 (patch) | |
tree | c7a53813d3d706b0dc74aadf3bfb2d89e39d703d /gcc/testsuite | |
parent | eab43e698f00ecc489453c3811ec98d9cc094f69 (diff) | |
download | gcc-26144dde3b68a331a8db86a9c8eaaa63d572bce9.zip gcc-26144dde3b68a331a8db86a9c8eaaa63d572bce9.tar.gz gcc-26144dde3b68a331a8db86a9c8eaaa63d572bce9.tar.bz2 |
re PR c++/70528 (bogus error: constructor required before non-static data member)
PR c++/70528
* class.c (type_has_constexpr_default_constructor): Return true
for an implicitly declared constructor.
From-SVN: r235002
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr70528.C | 16 |
5 files changed, 21 insertions, 4 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C index 45e1ed2..42ca30a 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor12.C @@ -3,6 +3,7 @@ template <typename Tp> struct C { + C() = default; constexpr C(const Tp& r) { } }; diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C index a67505d..8d352d0 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-default-ctor.C @@ -7,6 +7,6 @@ struct A { struct B: A { }; constexpr int f(B b) { return b.i; } -struct C { C(); }; // { dg-message "calls non-constexpr" } -struct D: C { }; // { dg-message "no constexpr constructor" } +struct C { C(); }; // { dg-message "" } +struct D: C { }; // { dg-message "" } constexpr int g(D d) { return 42; } // { dg-error "invalid type" } diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C index 30e0a64..bf95b24 100644 --- a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice6.C @@ -6,6 +6,6 @@ struct A A(int); }; -struct B : A {}; // { dg-error "no matching" } +struct B : A {}; // { dg-message "" } constexpr int foo(B) { return 0; } // { dg-error "invalid type" } diff --git a/gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C b/gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C index 7a22f88..7e2d58b 100644 --- a/gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C +++ b/gcc/testsuite/g++.dg/cpp0x/inh-ctor19.C @@ -8,7 +8,7 @@ struct A struct B : A { - using A::A; // { dg-error "inherited" } + using A::A; }; constexpr B b; // { dg-error "literal" } diff --git a/gcc/testsuite/g++.dg/cpp0x/pr70528.C b/gcc/testsuite/g++.dg/cpp0x/pr70528.C new file mode 100644 index 0000000..af1c84e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr70528.C @@ -0,0 +1,16 @@ +// PR c++/70258 +// { dg-do compile { target c++11 } } + +template <class T> +struct H +{ + template <typename A = T, typename = decltype (A())> + H (); +}; + +struct J { + struct K { + int First = 0; + }; + H<K> FunctionMDInfo; +}; |