aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/class.c11
-rw-r--r--libstdc++-v3/ChangeLog10
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/char/moveable2.cc1
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/cons/wchar_t/moveable2.cc1
-rw-r--r--libstdc++-v3/testsuite/util/testsuite_tr1.h2
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);
};