diff options
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/class.c | 11 | ||||
-rw-r--r-- | libstdc++-v3/ChangeLog | 10 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc | 1 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc | 1 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/util/testsuite_tr1.h | 2 |
6 files changed, 27 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; } diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 58eb498..b1f1814 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2011-11-17 Jason Merrill <jason@redhat.com> + + * testsuite/21_strings/basic_string/cons/char/moveable2.cc + (tstring): Add defaulted move assignment. + * testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc + (tstring): Add defaulted move assignment. + * testsuite/util/testsuite_tr1.h (NoexceptMoveConsClass): Add + defaulted move assignment operator. + (NoexceptMoveAssignClass): Add defaulted move constructor. + 2011-11-17 Jonathan Wakely <jwakely.gcc@gmail.com> * doc/xml/manual/status_cxx2011.xml: Status of piecewise construction diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc index 13cc4e5..2d1b4ca 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc @@ -31,6 +31,7 @@ class tstring : public std::basic_string<char> public: tstring() : std::basic_string<char>() {} tstring(tstring&& s) : std::basic_string<char>(std::move(s)) {} + tstring& operator=(tstring&& s) = default; }; void test01() diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc index e0b8b24..42026c9 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc @@ -31,6 +31,7 @@ class twstring : public std::basic_string<wchar_t> public: twstring() : std::basic_string<wchar_t>() {} twstring(twstring&& s) : std::basic_string<wchar_t>(std::move(s)) {} + twstring& operator=(twstring&&) = default; }; void test01() diff --git a/libstdc++-v3/testsuite/util/testsuite_tr1.h b/libstdc++-v3/testsuite/util/testsuite_tr1.h index f063896..1452e3e 100644 --- a/libstdc++-v3/testsuite/util/testsuite_tr1.h +++ b/libstdc++-v3/testsuite/util/testsuite_tr1.h @@ -199,6 +199,7 @@ namespace __gnu_test struct NoexceptMoveConsClass { NoexceptMoveConsClass(NoexceptMoveConsClass&&) noexcept(true); + NoexceptMoveConsClass& operator=(NoexceptMoveConsClass&&) = default; }; struct ExceptMoveConsClass @@ -220,6 +221,7 @@ namespace __gnu_test struct NoexceptMoveAssignClass { + NoexceptMoveAssignClass(NoexceptMoveAssignClass&&) = default; NoexceptMoveAssignClass& operator=(NoexceptMoveAssignClass&&) noexcept(true); }; |