diff options
author | Jason Merrill <jason@redhat.com> | 2011-11-17 11:35:11 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-11-17 11:35:11 -0500 |
commit | 830dea94f2bfdf797d368aa71d7bccb4fc215431 (patch) | |
tree | 90ab680bdfeecc66248d3b1aec35d367483a3032 /gcc | |
parent | a8e237782fe24e86b8f166454a0441e05d492631 (diff) | |
download | gcc-830dea94f2bfdf797d368aa71d7bccb4fc215431.zip gcc-830dea94f2bfdf797d368aa71d7bccb4fc215431.tar.gz gcc-830dea94f2bfdf797d368aa71d7bccb4fc215431.tar.bz2 |
class.c (add_implicitly_declared_members): Update move conditions.
N3203
* class.c (add_implicitly_declared_members): Update move
conditions.
From-SVN: r181445
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/class.c | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3807f9a..89f845e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-11-17 Jason Merrill <jason@redhat.com> + N3203 + * class.c (add_implicitly_declared_members): Update move + conditions. + PR c++/51137 * class.c (build_base_path): Don't do calculation in templates. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 0765817..cb0e683 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -2721,6 +2721,13 @@ add_implicitly_declared_members (tree t, int cant_have_const_cctor, int cant_have_const_assignment) { + bool move_ok = false; + + if (cxx_dialect >= cxx0x && !CLASSTYPE_DESTRUCTORS (t) + && !TYPE_HAS_COPY_CTOR (t) && !TYPE_HAS_COPY_ASSIGN (t) + && !type_has_move_constructor (t) && !type_has_move_assign (t)) + move_ok = true; + /* Destructor. */ if (!CLASSTYPE_DESTRUCTORS (t)) { @@ -2758,7 +2765,7 @@ add_implicitly_declared_members (tree t, TYPE_HAS_COPY_CTOR (t) = 1; TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor; CLASSTYPE_LAZY_COPY_CTOR (t) = 1; - if (cxx_dialect >= cxx0x && !type_has_move_constructor (t)) + if (move_ok) CLASSTYPE_LAZY_MOVE_CTOR (t) = 1; } @@ -2771,7 +2778,7 @@ add_implicitly_declared_members (tree t, TYPE_HAS_COPY_ASSIGN (t) = 1; TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment; CLASSTYPE_LAZY_COPY_ASSIGN (t) = 1; - if (cxx_dialect >= cxx0x && !type_has_move_assign (t)) + if (move_ok) CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1; } |