aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/class.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-07-31 16:19:26 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-07-31 16:19:26 +0200
commit686dca7612a8ab5ebebad2fc13bd9ea7793a7e40 (patch)
tree219af350267ed3b842757bed1fbe2a10d182b37a /gcc/cp/class.c
parent8810325ff666643de80110c5c6b4ce1cef921e1b (diff)
downloadgcc-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.c4
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. */