From df16e146cf5355d7faeee0812206a0a688643de9 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Thu, 26 Apr 2012 23:32:14 +0000 Subject: [PATCH] re PR c++/53096 ([DR 1333] [c++11] should be possible to default a copy ctor that takes non-const arg) /cp 2012-04-26 Paolo Carlini PR c++/53096 * class.c (check_bases_and_members): Implement core/1333, do not disallow defaulted in the class body non-const ref special members. /testsuite 2012-04-26 Paolo Carlini PR c++/53096 * g++.dg/cpp0x/defaulted35.C: New. * g++.dg/cpp0x/defaulted15.C: Adjust. From-SVN: r186888 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/class.c | 6 ++---- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/cpp0x/defaulted15.C | 2 +- gcc/testsuite/g++.dg/cpp0x/defaulted35.C | 8 ++++++++ 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/defaulted35.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 86e44fc..db8bf72 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-04-26 Paolo Carlini + + PR c++/53096 + * class.c (check_bases_and_members): Implement core/1333, do not + disallow defaulted in the class body non-const ref special members. + 2012-04-24 Paolo Carlini PR c++/52363 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 7b6559c..00aeefd 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -1,6 +1,7 @@ /* Functions related to building classes and their related objects. Copyright (C) 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, + 2012 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) @@ -5144,9 +5145,6 @@ check_bases_and_members (tree t) give the synthesis error. */ error ("%q+D declared to take const reference, but implicit " "declaration would take non-const", fn); - else if (imp_const_p && !fn_const_p) - error ("%q+D declared to take non-const reference cannot be " - "defaulted in the class body", fn); } defaulted_late_check (fn); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c7d000a..576c4aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-04-26 Paolo Carlini + + PR c++/53096 + * g++.dg/cpp0x/defaulted35.C: New. + * g++.dg/cpp0x/defaulted15.C: Adjust. + 2012-04-26 Janis Johnson * gcc.dg/bf-ms-layout.c: Adjust offsets to fit ms-bitfield diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted15.C b/gcc/testsuite/g++.dg/cpp0x/defaulted15.C index 0a47c20..6d182df 100644 --- a/gcc/testsuite/g++.dg/cpp0x/defaulted15.C +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted15.C @@ -43,7 +43,7 @@ SA(__has_trivial_copy(E)); struct F { - F(F&) = default; // { dg-error "non-const" } + F(F&) = default; }; struct G: public F diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted35.C b/gcc/testsuite/g++.dg/cpp0x/defaulted35.C new file mode 100644 index 0000000..ca700fb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/defaulted35.C @@ -0,0 +1,8 @@ +// PR c++/53096 +// { dg-options -std=c++0x } + +struct foo +{ + foo(foo&) = default; + foo& operator=(foo&) = default; +}; -- 2.7.4