diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-07-31 16:19:26 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-07-31 16:19:26 +0200 |
commit | 686dca7612a8ab5ebebad2fc13bd9ea7793a7e40 (patch) | |
tree | 219af350267ed3b842757bed1fbe2a10d182b37a /gcc/cp/class.c | |
parent | 8810325ff666643de80110c5c6b4ce1cef921e1b (diff) | |
download | gcc-686dca7612a8ab5ebebad2fc13bd9ea7793a7e40.zip gcc-686dca7612a8ab5ebebad2fc13bd9ea7793a7e40.tar.gz gcc-686dca7612a8ab5ebebad2fc13bd9ea7793a7e40.tar.bz2 |
P1008R1 - prohibit aggregates with user-declared constructors
P1008R1 - prohibit aggregates with user-declared constructors
* class.c (check_bases_and_members): For C++2a set
CLASSTYPE_NON_AGGREGATE based on TYPE_HAS_USER_CONSTRUCTOR rather than
type_has_user_provided_or_explicit_constructor.
* g++.dg/ext/is_aggregate.C: Add tests with deleted or defaulted ctor.
* g++.dg/cpp0x/defaulted1.C (main): Ifdef out for C++2a B b = {1};.
* g++.dg/cpp0x/deleted2.C: Expect error for C++2a.
* g++.dg/cpp2a/aggr1.C: New test.
* g++.dg/cpp2a/aggr2.C: New test.
From-SVN: r263115
Diffstat (limited to 'gcc/cp/class.c')
-rw-r--r-- | gcc/cp/class.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/cp/class.c b/gcc/cp/class.c index d2f7808..c03a82b 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -5571,7 +5571,9 @@ check_bases_and_members (tree t) Again, other conditions for being an aggregate are checked elsewhere. */ CLASSTYPE_NON_AGGREGATE (t) - |= (type_has_user_provided_or_explicit_constructor (t) + |= ((cxx_dialect < cxx2a + ? type_has_user_provided_or_explicit_constructor (t) + : TYPE_HAS_USER_CONSTRUCTOR (t)) || TYPE_POLYMORPHIC_P (t)); /* This is the C++98/03 definition of POD; it changed in C++0x, but we retain the old definition internally for ABI reasons. */ |