commit 8b1e494d587c2bc468409fe607ae13dc9b13dff0
Author: Jason Merrill <jason@redhat.com>
Date:   Mon Oct 17 16:29:08 2011 -0400

    	PR c++/50500
    	DR 1082
    	* class.c (type_has_user_declared_move_constructor): New.
    	(type_has_user_declared_move_assign): New.
    	(add_implicitly_declared_members): Add lazy copy ops
    	even if there's a move.
    	* method.c (lazily_declare_fn): Delete implicit copies
    	if there's a move.
    	(maybe_explain_implicit_delete): Explain this.  Use inform rather
    	than error.
    	* cp-tree.h: Declare new fns.

diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 6185054..c8efc7e 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -2736,13 +2736,12 @@ add_implicitly_declared_members (tree t,
 
      If a class definition does not explicitly declare a copy
      constructor, one is declared implicitly.  */
-  if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (t)
-      && !type_has_move_constructor (t))
+  if (! TYPE_HAS_COPY_CTOR (t) && ! TYPE_FOR_JAVA (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)
+      if (cxx_dialect >= cxx0x && !type_has_move_constructor (t))
 	CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
     }
 
@@ -2750,13 +2749,12 @@ add_implicitly_declared_members (tree t,
      when it is needed.  For now, just record whether or not the type
      of the parameter to the assignment operator will be a const or
      non-const reference.  */
-  if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (t)
-      && !type_has_move_assign (t))
+  if (!TYPE_HAS_COPY_ASSIGN (t) && !TYPE_FOR_JAVA (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)
+      if (cxx_dialect >= cxx0x && !type_has_move_assign (t))
 	CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
     }
 
@@ -4495,6 +4493,54 @@ type_has_move_assign (tree t)
   return false;
 }
 
+/* Returns true iff class T has a move constructor that was explicitly
+   declared in the class body.  Note that this is different from
+   "user-provided", which doesn't include functions that are defaulted in
+   the class.  */
+
+bool
+type_has_user_declared_move_constructor (tree t)
+{
+  tree fns;
+
+  if (CLASSTYPE_LAZY_MOVE_CTOR (t))
+    return false;
+
+  if (!CLASSTYPE_METHOD_VEC (t))
+    return false;
+
+  for (fns = CLASSTYPE_CONSTRUCTORS (t); fns; fns = OVL_NEXT (fns))
+    {
+      tree fn = OVL_CURRENT (fns);
+      if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
+	return true;
+    }
+
+  return false;
+}
+
+/* Returns true iff class T has a move assignment operator that was
+   explicitly declared in the class body.  */
+
+bool
+type_has_user_declared_move_assign (tree t)
+{
+  tree fns;
+
+  if (CLASSTYPE_LAZY_MOVE_ASSIGN (t))
+    return false;
+
+  for (fns = lookup_fnfields_slot (t, ansi_assopname (NOP_EXPR));
+       fns; fns = OVL_NEXT (fns))
+    {
+      tree fn = OVL_CURRENT (fns);
+      if (move_fn_p (fn) && !DECL_ARTIFICIAL (fn))
+	return true;
+    }
+
+  return false;
+}
+
 /* Nonzero if we need to build up a constructor call when initializing an
    object of this class, either because it has a user-provided constructor
    or because it doesn't have a default constructor (so we need to give an
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index bda18d9..d0e874b 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -4870,6 +4870,8 @@ extern bool type_has_constexpr_default_constructor (tree);
 extern bool type_has_virtual_destructor		(tree);
 extern bool type_has_move_constructor		(tree);
 extern bool type_has_move_assign		(tree);
+extern bool type_has_user_declared_move_constructor (tree);
+extern bool type_has_user_declared_move_assign(tree);
 extern bool type_build_ctor_call		(tree);
 extern void explain_non_literal_class		(tree);
 extern void defaulted_late_check		(tree);
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 0718f47..bb58312 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1375,18 +1375,31 @@ maybe_explain_implicit_delete (tree decl)
 	{
 	  informed = true;
 	  if (sfk == sfk_constructor)
-	    error ("a lambda closure type has a deleted default constructor");
+	    inform (DECL_SOURCE_LOCATION (decl),
+		    "a lambda closure type has a deleted default constructor");
 	  else if (sfk == sfk_copy_assignment)
-	    error ("a lambda closure type has a deleted copy assignment operator");
+	    inform (DECL_SOURCE_LOCATION (decl),
+		    "a lambda closure type has a deleted copy assignment operator");
 	  else
 	    informed = false;
 	}
+      else if (DECL_ARTIFICIAL (decl)
+	       && (sfk == sfk_copy_assignment
+		   || sfk == sfk_copy_constructor)
+	       && (type_has_user_declared_move_constructor (ctype)
+		   || type_has_user_declared_move_assign (ctype)))
+	{
+	  inform (0, "%q+#D is implicitly declared as deleted because %qT "
+		 "declares a move constructor or move assignment operator",
+		 decl, ctype);
+	  informed = true;
+	}
       if (!informed)
 	{
 	  tree parm_type = TREE_VALUE (FUNCTION_FIRST_USER_PARMTYPE (decl));
 	  bool const_p = CP_TYPE_CONST_P (non_reference (parm_type));
 	  tree scope = push_scope (ctype);
-	  error ("%qD is implicitly deleted because the default "
+	  inform (0, "%q+#D is implicitly deleted because the default "
 		 "definition would be ill-formed:", decl);
 	  pop_scope (scope);
 	  synthesized_method_walk (ctype, sfk, const_p,
@@ -1743,6 +1756,15 @@ lazily_declare_fn (special_function_kind sfk, tree type)
   /* Declare the function.  */
   fn = implicitly_declare_fn (sfk, type, const_p);
 
+  /* [class.copy]/8 If the class definition declares a move constructor or
+     move assignment operator, the implicitly declared copy constructor is
+     defined as deleted.... */
+  if ((sfk == sfk_copy_assignment
+       || sfk == sfk_copy_constructor)
+      && (type_has_user_declared_move_constructor (type)
+	  || type_has_user_declared_move_assign (type)))
+    DECL_DELETED_FN (fn) = true;
+
   /* For move variants, rather than declare them as deleted we just
      don't declare them at all.  */
   if (DECL_DELETED_FN (fn)
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted20.C b/gcc/testsuite/g++.dg/cpp0x/defaulted20.C
index 5d536a9..9b8c697 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted20.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted20.C
@@ -2,13 +2,12 @@
 // { dg-options -std=c++0x }
 
 struct A {
-  A(A&&) = default;		// { dg-message "A::A|no known conversion" }
+  A(A&&) = default;
 };
 struct B {
   const A a;
   B(const B&) = default;
-  B(B&&) = default;		// { dg-error "implicitly deleted|no match" }
-  // { dg-message "candidate" "candidate note" { target *-*-* } 10 }
+  B(B&&) = default;	// { dg-error "implicitly deleted|use of deleted" }
 };
 
 void g(B);			// { dg-error "argument 1" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/defaulted21.C b/gcc/testsuite/g++.dg/cpp0x/defaulted21.C
index 3e74033..30a4a7c 100644
--- a/gcc/testsuite/g++.dg/cpp0x/defaulted21.C
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted21.C
@@ -12,7 +12,7 @@ struct X {
   X(X&&);
 };
 
-X::X(X&&)=default;		// { dg-error "implicitly deleted" }
+X::X(X&&)=default;		// { dg-message "implicitly deleted" }
 // { dg-error "does not have a move constructor" "" { target *-*-* } 15 }
 
 X f() {
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C b/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
index 861fe20..c3f6b85 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit-copy.C
@@ -3,13 +3,13 @@ struct S
 {
   S();
 private:
-  S(S const &&);		// { dg-error "" }
-  S & operator=(S const &&);	// { dg-error "" }
+  S(S const &&);
+  S & operator=(S const &&);
 };
 
 void f()
 {
   S a;
-  S b(a);			// { dg-error "" }
-  a = b;			// { dg-error "" }
+  S b(a);			// { dg-error "deleted" }
+  a = b;			// { dg-error "deleted" }
 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit12.C b/gcc/testsuite/g++.dg/cpp0x/implicit12.C
new file mode 100644
index 0000000..da806e0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit12.C
@@ -0,0 +1,54 @@
+// PR c++/50500
+// { dg-options "-std=c++0x" }
+
+// If a class declares move operations, the implicitly declared copy
+// operations are deleted.
+struct A
+{
+  A();
+  A(A&&);
+  A& operator=(A&&);
+};
+
+// But they can still be explicitly defaulted.
+struct B
+{
+  B();
+  B(B&&);
+  B(const B&) = default;
+  B& operator=(B&&);
+  B& operator=(const B&) = default;
+};
+
+struct C
+{
+  C();
+  C(C&&);
+};
+
+struct D
+{
+  D();
+  D& operator=(D&&);
+};
+
+int main()
+{
+  A a;
+  A a2 (a);			// { dg-error "deleted" }
+  a2 = a;			// { dg-error "deleted" }
+
+  B b;
+  B b2 (b);
+  b2 = b;
+
+  C c;
+  C c2(c);			// { dg-error "deleted" }
+  c2 = c;			// { dg-error "deleted" }
+
+  D d;
+  D d2(d);			// { dg-error "deleted" }
+  d2 = d;			// { dg-error "deleted" }
+}
+
+// { dg-prune-output "because" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit4.C b/gcc/testsuite/g++.dg/cpp0x/implicit4.C
index f97eb75..47fd56a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit4.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit4.C
@@ -2,14 +2,13 @@
 // constructor to be deleted.
 // { dg-options "-std=c++0x" }
 
-struct A
+struct A			// { dg-message "declares a move" }
 {
-  A();				// { dg-message "A::A|candidate expects" }
-  A(A&&);			// { dg-message "A::A|no known conversion" }
+  A();
+  A(A&&);
 };
 
-struct B: A			// { dg-error "implicit|no match" }
-// { dg-message "candidate" "candidate note" { target *-*-* } 11 }
+struct B: A			// { dg-error "use of deleted" }
 {
 };
 
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit5.C b/gcc/testsuite/g++.dg/cpp0x/implicit5.C
index f25c085..d252948 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit5.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit5.C
@@ -1,19 +1,19 @@
-// Test that the default B copy constructor calls the A member template
-// constructor.
+// Test that the default B copy constructor calls the deleted A
+// copy constructor.
 // { dg-options -std=c++0x }
 
-struct A
+struct A			// { dg-message "declares a move" }
 {
   A() = default;
   A(A&&) = default;
   template <class T>
-  A(const T& t) { t.i; }	// { dg-error "no member" }
+  A(const T& t) { t.i; }
 };
 
-struct B: A { };
+struct B: A { };		// { dg-error "implicitly|use of deleted" }
 
 int main()
 {
   B b;
-  B b2(b);
+  B b2(b);			// { dg-error "deleted" }
 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/implicit8.C b/gcc/testsuite/g++.dg/cpp0x/implicit8.C
index 2f3feba..c949af2 100644
--- a/gcc/testsuite/g++.dg/cpp0x/implicit8.C
+++ b/gcc/testsuite/g++.dg/cpp0x/implicit8.C
@@ -1,9 +1,6 @@
 // The hack for PR c++/44909 breaks this testcase.  We need feedback
 // from the C++ committee to know how to proceed.
 // { dg-options -std=c++0x }
-// { dg-prune-output "implicitly deleted" }
-// { dg-prune-output "cannot bind" }
-// { dg-prune-output "initializing argument" }
 
 struct A
 {
@@ -28,7 +25,8 @@ struct B
 // subobject of C should use B(const BP&).  But we ignore that constructor
 // in order to break the cycle in 44909.  Perhaps the move ctor shouldn't
 // suppress the copy ctor?
-struct C: A, B { };
+// As of DR 1082, it doesn't suppress it.
+struct C: A, B { };		// { dg-error "use of deleted" }
 
 C c;
-C c2(c);			// { dg-bogus "deleted" "" { xfail *-*-* } }
+C c2(c);			// { dg-error "deleted" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
index 8d7d093..6468f18 100644
--- a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice2.C
@@ -9,7 +9,7 @@ decltype(F()) run(F f) // { dg-message "note" }
 
 int main()
 {
-  auto l = []() { return 5; }; // { dg-error "lambda closure type" }
+  auto l = []() { return 5; }; // { dg-message "lambda closure type" }
 
   run(l); // { dg-error "no match" }
   // { dg-message "candidate" "candidate note" { target *-*-* } 14 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/not_special.C b/gcc/testsuite/g++.dg/cpp0x/not_special.C
index 6d73bd0..2b510bb 100644
--- a/gcc/testsuite/g++.dg/cpp0x/not_special.C
+++ b/gcc/testsuite/g++.dg/cpp0x/not_special.C
@@ -1,8 +1,8 @@
 // I, Howard Hinnant, hereby place this code in the public domain.
 
 // Test that move constructor and move assignement are special.
-//   That is, their presence should inhibit compiler generated
-//   copy ctor or assignment.
+//   That is, their presence should cause compiler declared
+//   copy ctor or assignment to be deleted.
 
 // { dg-options "-std=c++0x" }
 
@@ -24,12 +24,12 @@ struct base
     base& operator=(const base&) {++assign; return *this;}
 };
 
-struct derived
+struct derived			// { dg-message "declares a move" }
     : base
 {
     derived() {}
-    derived(derived&&) {}			  // { dg-error "argument 1" }
-    derived& operator=(derived&&) {return *this;} // { dg-error "argument 1" }
+    derived(derived&&) {}
+    derived& operator=(derived&&) {return *this;}
 };
 
 int test1()
@@ -37,11 +37,11 @@ int test1()
     derived d;
     derived d2(static_cast<derived&&>(d));  // should not call base::(const base&)
     assert(copy == 0);
-    derived d3(d);		// { dg-error "lvalue" }
+    derived d3(d);		// { dg-error "deleted" }
     assert(copy == 1);
     d2 = static_cast<derived&&>(d);         // should not call base::operator=
     assert(assign == 0);
-    d3 = d;			// { dg-error "lvalue" }
+    d3 = d;			// { dg-error "deleted" }
     assert(assign == 1);
     return 0;
 }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
index 2765b5f..cbce7c4 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C
@@ -5,22 +5,22 @@
 int move_construct = 0;
 int move_assign = 0;
 
-struct base2
+struct base2			// { dg-message "declares a move" }
 {
     base2() {}
-    base2(base2&&) {++move_construct;} // { dg-error "argument 1" }
-    base2& operator=(base2&&) {++move_assign; return *this;} // { dg-error "argument 1" }
+    base2(base2&&) {++move_construct;}
+    base2& operator=(base2&&) {++move_assign; return *this;}
 };
 
 int test2()
 {
     base2 b;
-    base2 b2(b);		// { dg-error "lvalue" }
+    base2 b2(b);		// { dg-error "deleted" }
     assert(move_construct == 0);
     base2 b3(static_cast<base2&&>(b));
     base2 b4 = static_cast<base2&&>(b);
     assert(move_construct == 2);
-    b = b2;			// { dg-error "lvalue" }
+    b = b2;			// { dg-error "deleted" }
     assert(move_assign == 0);
     b = static_cast<base2&&>(b2);
     assert(move_assign == 1);
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv1n.C b/gcc/testsuite/g++.dg/cpp0x/rv1n.C
index 5224d3e..68305eb 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv1n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv1n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
 struct A
 {
     A();
-    A(const volatile A&&);	// { dg-error "argument 1" }
+    A(const volatile A&&);
 };
 
                A    source();
@@ -35,9 +35,9 @@ one   sink_1_1(               A&);  // { dg-error "" }
 int test1_1()
 {
                    A a;
-    const          A ca = a;	// { dg-error "cannot bind" }
+    const          A ca = a;	// { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a;	// { dg-error "cannot bind" }
+    const volatile A cva = a;	// { dg-error "deleted" }
     sink_1_1(ca);           // { dg-error "invalid initialization" }
     sink_1_1(va);           // { dg-error "invalid initialization" }
     sink_1_1(cva);          // { dg-error "invalid initialization" }
@@ -53,9 +53,9 @@ two   sink_1_2(const          A&);  // { dg-error "" }
 int test1_2()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_1_2(va);           // { dg-error "invalid initialization" }
     sink_1_2(cva);          // { dg-error "invalid initialization" }
     sink_1_2(v_source());   // { dg-error "invalid initialization" }
@@ -68,9 +68,9 @@ three sink_1_3(volatile       A&);  // { dg-error "" }
 int test1_3()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_1_3(ca);           // { dg-error "invalid initialization" }
     sink_1_3(cva);          // { dg-error "invalid initialization" }
     sink_1_3(source());     // { dg-error "invalid initialization" }
@@ -85,9 +85,9 @@ four  sink_1_4(const volatile A&);  // { dg-error "" }
 int test1_4()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_1_4(source());     // { dg-error "invalid initialization" }
     sink_1_4(c_source());   // { dg-error "invalid initialization" }
     sink_1_4(v_source());   // { dg-error "invalid initialization" }
@@ -100,9 +100,9 @@ five  sink_1_5(               A&&);  // { dg-error "" }
 int test1_5()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_1_5(a);		// { dg-error "lvalue" }
     sink_1_5(ca);           // { dg-error "invalid initialization" }
     sink_1_5(va);           // { dg-error "invalid initialization" }
@@ -118,9 +118,9 @@ six   sink_1_6(const          A&&);  // { dg-error "" }
 int test1_6()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_1_6(a);		// { dg-error "lvalue" }
     sink_1_6(ca);		// { dg-error "lvalue" }
     sink_1_6(va);           // { dg-error "invalid initialization" }
@@ -135,9 +135,9 @@ seven sink_1_7(volatile       A&&);  // { dg-error "" }
 int test1_7()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_1_7(a);	    // { dg-error "lvalue" }
     sink_1_7(ca);           // { dg-error "invalid initialization" }
     sink_1_7(va);	    // { dg-error "lvalue" }
@@ -152,9 +152,9 @@ eight sink_1_8(const volatile A&&); // { dg-error "" }
 int test1_8()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_1_8(a);		// { dg-error "lvalue" }
     sink_1_8(ca);		// { dg-error "lvalue" }
     sink_1_8(va);		// { dg-error "lvalue" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv2n.C b/gcc/testsuite/g++.dg/cpp0x/rv2n.C
index 2b3a9c0..a9d3741 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv2n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv2n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
 struct A
 {
     A();
-    A(const volatile A&&);	// { dg-error "argument 1" }
+    A(const volatile A&&);
 };
 
                A    source();
@@ -36,9 +36,9 @@ two   sink_2_12(const          A&);  // { dg-message "note|argument" }
 int test2_12()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_12(va);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 42 }
     sink_2_12(cva);          // { dg-error "no match" }
@@ -56,9 +56,9 @@ three sink_2_13(volatile       A&);  // { dg-message "note|argument" }
 int test2_13()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_13(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 62 }
     sink_2_13(cva);          // { dg-error "no match" }
@@ -80,9 +80,9 @@ four  sink_2_14(const volatile A&);  // { dg-message "note|argument" }
 int test2_14()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_14(source());     // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 86 }
     sink_2_14(c_source());   // { dg-error "no match" }
@@ -100,9 +100,9 @@ five  sink_2_15(               A&&);  // { dg-message "note|argument" }
 int test2_15()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
    sink_2_15(ca);           // { dg-error "no match" }
    // { dg-message "candidate" "candidate note" { target *-*-* } 106 }
    sink_2_15(va);           // { dg-error "no match" }
@@ -124,9 +124,9 @@ six   sink_2_16(const          A&&);  // { dg-message "note|argument" }
 int test2_16()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_16(ca);	     // { dg-error "lvalue" }
     sink_2_16(va);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 131 }
@@ -145,9 +145,9 @@ seven sink_2_17(volatile       A&&);  // { dg-message "note|argument" }
 int test2_17()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_17(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 151 }
     sink_2_17(va);           // { dg-error "lvalue" }
@@ -166,9 +166,9 @@ eight sink_2_18(const volatile A&&); // { dg-error "argument" }
 int test2_18()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_18(ca);		// { dg-error "lvalue" }
     sink_2_18(va);		// { dg-error "lvalue" }
     sink_2_18(cva);		// { dg-error "lvalue" }
@@ -180,9 +180,9 @@ three sink_2_23(volatile       A&);  // { dg-message "note|argument" }
 int test2_23()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_23(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 186 }
     sink_2_23(cva);          // { dg-error "no match" }
@@ -200,9 +200,9 @@ four  sink_2_24(const volatile A&);  // { dg-message "note|argument" }
 int test2_24()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_24(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 206 }
     sink_2_24(cv_source());  // { dg-error "no match" }
@@ -216,9 +216,9 @@ four  sink_2_34(const volatile A&);  // { dg-message "note|argument" }
 int test2_34()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_34(source());     // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 222 }
     sink_2_34(c_source());   // { dg-error "no match" }
@@ -236,9 +236,9 @@ five  sink_2_25(               A&&);  // { dg-message "note|argument" }
 int test2_25()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
    sink_2_25(va);           // { dg-error "no match" }
    // { dg-message "candidate" "candidate note" { target *-*-* } 242 }
    sink_2_25(cva);          // { dg-error "no match" }
@@ -256,9 +256,9 @@ six   sink_2_26(const          A&&);  // { dg-message "note|argument" }
 int test2_26()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_26(va);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 262 }
     sink_2_26(cva);          // { dg-error "no match" }
@@ -276,9 +276,9 @@ seven sink_2_27(volatile       A&&);  // { dg-message "note|argument" }
 int test2_27()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_27(va);	     // { dg-error "lvalue" }
     sink_2_27(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 283 }
@@ -293,9 +293,9 @@ eight sink_2_28(const volatile A&&); // { dg-error "argument" }
 int test2_28()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_28(va);		// { dg-error "lvalue" }
     sink_2_28(cva);		// { dg-error "lvalue" }
 }
@@ -306,9 +306,9 @@ five  sink_2_35(               A&&);  // { dg-message "note|argument" }
 int test2_35()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_35(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 312 }
     sink_2_35(cva);          // { dg-error "no match" }
@@ -328,9 +328,9 @@ six   sink_2_36(const          A&&);  // { dg-message "note|argument" }
 int test2_36()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_36(ca);		// { dg-error "lvalue" }
     sink_2_36(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 335 }
@@ -347,9 +347,9 @@ seven sink_2_37(volatile       A&&);  // { dg-message "note|argument" }
 int test2_37()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_37(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 353 }
     sink_2_37(cva);          // { dg-error "no match" }
@@ -367,9 +367,9 @@ eight sink_2_38(const volatile A&&); // { dg-error "argument" }
 int test2_38()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_38(ca);		// { dg-error "lvalue" }
     sink_2_38(cva);		// { dg-error "lvalue" }
 }
@@ -380,9 +380,9 @@ five  sink_2_45(               A&&);  // { dg-message "note|argument" }
 int test2_45()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_45(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 386 }
     sink_2_45(v_source());   // { dg-error "no match" }
@@ -398,9 +398,9 @@ six   sink_2_46(const          A&&);  // { dg-message "note|argument" }
 int test2_46()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_46(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 404 }
     sink_2_46(cv_source());  // { dg-error "no match" }
@@ -414,9 +414,9 @@ seven sink_2_47(volatile       A&&);  // { dg-message "note|argument" }
 int test2_47()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_47(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 420 }
     sink_2_47(cv_source());  // { dg-error "no match" }
@@ -430,9 +430,9 @@ six   sink_2_56(const          A&&);  // { dg-message "note|argument" }
 int test2_56()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_56(a);		// { dg-error "lvalue" }
     sink_2_56(ca);		// { dg-error "lvalue" }
     sink_2_56(va);           // { dg-error "no match" }
@@ -452,9 +452,9 @@ seven sink_2_57(volatile       A&&);  // { dg-message "note|argument" }
 int test2_57()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_57(a);		// { dg-error "lvalue" }
     sink_2_57(va);		// { dg-error "lvalue" }
     sink_2_57(ca);           // { dg-error "no match" }
@@ -474,9 +474,9 @@ eight sink_2_58(const volatile A&&); // { dg-error "argument" }
 int test2_58()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_58(a);		// { dg-error "lvalue" }
     sink_2_58(ca);		// { dg-error "lvalue" }
     sink_2_58(va);		// { dg-error "lvalue" }
@@ -489,9 +489,9 @@ seven sink_2_67(volatile       A&&);  // { dg-message "note|argument" }
 int test2_67()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_67(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 495 }
     sink_2_67(ca);	     // { dg-error "lvalue" }
@@ -511,9 +511,9 @@ eight sink_2_68(const volatile A&&); // { dg-error "argument" }
 int test2_68()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_68(a);		// { dg-error "lvalue" }
     sink_2_68(ca);		// { dg-error "lvalue" }
     sink_2_68(va);		// { dg-error "lvalue" }
@@ -526,9 +526,9 @@ eight sink_2_78(const volatile A&&); // { dg-error "argument" }
 int test2_78()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_2_78(a);		// { dg-error "lvalue" }
     sink_2_78(ca);		// { dg-error "lvalue" }
     sink_2_78(va);		// { dg-error "lvalue" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv3n.C b/gcc/testsuite/g++.dg/cpp0x/rv3n.C
index 637716f..14b810a 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv3n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv3n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
 struct A
 {
     A();
-    A(const volatile A&&);	// { dg-error "argument 1" }
+    A(const volatile A&&);
 };
 
                A    source();
@@ -37,9 +37,9 @@ three sink_3_123(volatile       A&);  // { dg-message "three sink_3_123|no known
 int test3_123()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_123(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 43 }
     sink_3_123(v_source());   // { dg-error "no match" }
@@ -60,9 +60,9 @@ four  sink_3_124(const volatile A&);  // { dg-message "four sink_3_124|no known
 int test3_124()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_124(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
     sink_3_124(cv_source());  // { dg-error "no match" }
@@ -73,9 +73,9 @@ int test3_124()
 int test3_125()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_125(va);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 79 }
     sink_3_125(cva);          // { dg-error "no match" }
@@ -94,9 +94,9 @@ six   sink_3_126(const          A&&);  // { dg-message "six sink_3_126|no known
 int test3_126()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_126(va);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 100 }
     sink_3_126(cva);          // { dg-error "no match" }
@@ -115,9 +115,9 @@ seven sink_3_127(volatile       A&&);  // { dg-message "seven sink_3_127|no know
 int test3_127()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_127(va);		// { dg-error "lvalue" }
     sink_3_127(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 122 }
@@ -133,9 +133,9 @@ eight sink_3_128(const volatile A&&); // { dg-message "" }
 int test3_128()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
 
     sink_3_128(va);		// { dg-error "lvalue" }
     sink_3_128(cva);		// { dg-error "lvalue" }
@@ -148,9 +148,9 @@ four  sink_3_134(const volatile A&);  // { dg-message "four sink_3_134|no known
 int test3_134()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_134(source());     // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 154 }
     sink_3_134(c_source());   // { dg-error "no match" }
@@ -169,9 +169,9 @@ five  sink_3_135(               A&&);  // { dg-message "five sink_3_135|no known
 int test3_135()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_135(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 175 }
     sink_3_135(cva);          // { dg-error "no match" }
@@ -192,9 +192,9 @@ six   sink_3_136(const          A&&);  // { dg-message "" }
 int test3_136()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_136(ca);		// { dg-error "lvalue" }
     sink_3_136(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 199 }
@@ -212,9 +212,9 @@ seven sink_3_137(volatile       A&&);  // { dg-message "note" }
 int test3_137()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_137(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 218 }
     sink_3_137(cva);          // { dg-error "no match" }
@@ -233,9 +233,9 @@ eight sink_3_138(const volatile A&&); // { dg-message "" }
 int test3_138()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_138(ca);		// { dg-error "lvalue" }
     sink_3_138(cva);		// { dg-error "lvalue" }
     return 0;
@@ -248,9 +248,9 @@ five  sink_3_145(               A&&);  // { dg-message "note" }
 int test3_145()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_145(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 254 }
     sink_3_145(v_source());   // { dg-error "no match" }
@@ -267,9 +267,9 @@ six   sink_3_146(const          A&&);  // { dg-message "note" }
 int test3_146()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_146(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 273 }
     sink_3_146(cv_source());  // { dg-error "no match" }
@@ -284,9 +284,9 @@ seven sink_3_147(volatile       A&&);  // { dg-message "note" }
 int test3_147()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_147(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 290 }
     sink_3_147(cv_source());  // { dg-error "no match" }
@@ -301,9 +301,9 @@ six   sink_3_156(const          A&&);  // { dg-message "" }
 int test3_156()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_156(ca);		// { dg-error "lvalue" }
     sink_3_156(va);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 308 }
@@ -323,9 +323,9 @@ seven sink_3_157(volatile       A&&);  // { dg-message "" }
 int test3_157()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_157(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 329 }
     sink_3_157(va);	      // { dg-error "lvalue" }
@@ -345,9 +345,9 @@ eight sink_3_158(const volatile A&&); // { dg-message "" }
 int test3_158()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_158(ca);		// { dg-error "lvalue" }
     sink_3_158(va);		// { dg-error "lvalue" }
     sink_3_158(cva);		// { dg-error "lvalue" }
@@ -361,9 +361,9 @@ seven sink_3_167(volatile       A&&);  // { dg-message "" }
 int test3_167()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_167(ca);		// { dg-error "lvalue" }
     sink_3_167(va);		// { dg-error "lvalue" }
     sink_3_167(cva);          // { dg-error "no match" }
@@ -382,9 +382,9 @@ eight sink_3_168(const volatile A&&); // { dg-message "" }
 int test3_168()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_168(ca);		// { dg-error "lvalue" }
     sink_3_168(va);		// { dg-error "lvalue" }
     sink_3_168(cva);		// { dg-error "lvalue" }
@@ -398,9 +398,9 @@ eight sink_3_178(const volatile A&&); // { dg-message "" }
 int test3_178()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_178(ca);		// { dg-error "lvalue" }
     sink_3_178(va);		// { dg-error "lvalue" }
     sink_3_178(cva);		// { dg-error "lvalue" }
@@ -414,9 +414,9 @@ four  sink_3_234(const volatile A&);  // { dg-message "note" }
 int test3_234()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_234(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 420 }
     sink_3_234(v_source());   // { dg-error "no match" }
@@ -433,9 +433,9 @@ five  sink_3_235(               A&&);  // { dg-message "note" }
 int test3_235()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_235(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 439 }
     sink_3_235(cva);          // { dg-error "no match" }
@@ -454,9 +454,9 @@ six   sink_3_236(const          A&&);  // { dg-message "note" }
 int test3_236()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_236(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 460 }
     sink_3_236(cva);          // { dg-error "no match" }
@@ -475,9 +475,9 @@ seven sink_3_237(volatile       A&&);  // { dg-message "note" }
 int test3_237()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_237(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 481 }
     sink_3_237(cva);          // { dg-error "no match" }
@@ -494,9 +494,9 @@ eight sink_3_238(const volatile A&&);  // { dg-message "eight sink_3_238|no know
 int test3_238()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_238(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 500 }
     sink_3_238(cva); // { dg-error "lvalue" }
@@ -510,9 +510,9 @@ five  sink_3_245(               A&&);  // { dg-message "five sink_3_245|no known
 int test3_245()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_245(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 516 }
     sink_3_245(cv_source());  // { dg-error "no match" }
@@ -527,9 +527,9 @@ six   sink_3_246(const          A&&);  // { dg-message "six sink_3_246|no known
 int test3_246()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_246(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 533 }
     sink_3_246(cv_source());  // { dg-error "no match" }
@@ -544,9 +544,9 @@ seven sink_3_247(volatile       A&&);  // { dg-message "seven sink_3_247|no know
 int test3_247()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_247(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 550 }
     return 0;
@@ -559,9 +559,9 @@ six   sink_3_256(const          A&&);  // { dg-message "six sink_3_256|no known
 int test3_256()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_256(va);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 565 }
     sink_3_256(cva);          // { dg-error "no match" }
@@ -580,9 +580,9 @@ seven sink_3_257(volatile       A&&);  // { dg-message "seven sink_3_257|no know
 int test3_257()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_257(va);		// { dg-error "lvalue" }
     sink_3_257(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 587 }
@@ -598,9 +598,9 @@ eight sink_3_258(const volatile A&&); // { dg-message "" }
 int test3_258()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_258(va);		// { dg-error "lvalue" }
     sink_3_258(cva);		// { dg-error "lvalue" }
     return 0;
@@ -613,9 +613,9 @@ seven sink_3_267(volatile       A&&);  // { dg-message "seven sink_3_267|no know
 int test3_267()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_267(va);		// { dg-error "lvalue" }
     sink_3_267(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 620 }
@@ -633,9 +633,9 @@ eight sink_3_268(const volatile A&&); // { dg-message "" }
 int test3_268()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_268(va);		// { dg-error "lvalue" }
     sink_3_268(cva);		// { dg-error "lvalue" }
     return 0;
@@ -648,9 +648,9 @@ eight sink_3_278(const volatile A&&); // { dg-message "" }
 int test3_278()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_278(va);		// { dg-error "lvalue" }
     sink_3_278(cva);		// { dg-error "lvalue" }
     return 0;
@@ -663,9 +663,9 @@ five  sink_3_345(               A&&);  // { dg-message "five sink_3_345|no known
 int test3_345()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_345(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 669 }
     sink_3_345(v_source());   // { dg-error "no match" }
@@ -682,9 +682,9 @@ six   sink_3_346(const          A&&);  // { dg-message "six sink_3_346|no known
 int test3_346()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_346(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 688 }
     sink_3_346(cv_source());  // { dg-error "no match" }
@@ -699,9 +699,9 @@ seven sink_3_347(volatile       A&&);  // { dg-message "seven sink_3_347|no know
 int test3_347()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_347(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 705 }
     sink_3_347(cv_source());  // { dg-error "no match" }
@@ -716,9 +716,9 @@ six   sink_3_356(const          A&&);  // { dg-message "six sink_3_356|no known
 int test3_356()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_356(ca);		// { dg-error "lvalue" }
     sink_3_356(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 723 }
@@ -736,9 +736,9 @@ seven sink_3_357(volatile       A&&);  // { dg-message "seven sink_3_357|no know
 int test3_357()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_357(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 742 }
     sink_3_357(cva);          // { dg-error "no match" }
@@ -757,9 +757,9 @@ eight sink_3_358(const volatile A&&); // { dg-message "" }
 int test3_358()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_358(ca);		// { dg-error "lvalue" }
     sink_3_358(cva);		// { dg-error "lvalue" }
     return 0;
@@ -772,9 +772,9 @@ seven sink_3_367(volatile       A&&);  // { dg-message "seven sink_3_367|no know
 int test3_367()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_367(ca);		// { dg-error "lvalue" }
     sink_3_367(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 779 }
@@ -792,9 +792,9 @@ eight sink_3_368(const volatile A&&); // { dg-message "" }
 int test3_368()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_368(ca);		// { dg-error "lvalue" }
     sink_3_368(cva);		// { dg-error "lvalue" }
     return 0;
@@ -807,9 +807,9 @@ eight sink_3_378(const volatile A&&); // { dg-message "" }
 int test3_378()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_378(ca);		// { dg-error "lvalue" }
     sink_3_378(cva);		// { dg-error "lvalue" }
     return 0;
@@ -822,9 +822,9 @@ six   sink_3_456(const          A&&);  // { dg-message "note" }
 int test3_456()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_456(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 828 }
     sink_3_456(cv_source());  // { dg-error "no match" }
@@ -839,9 +839,9 @@ seven sink_3_457(volatile       A&&);  // { dg-message "note" }
 int test3_457()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_457(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 845 }
     sink_3_457(cv_source());  // { dg-error "no match" }
@@ -856,9 +856,9 @@ seven sink_3_467(volatile       A&&);  // { dg-message "note" }
 int test3_467()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_467(source());     // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 862 }
     sink_3_467(cv_source());  // { dg-error "no match" }
@@ -873,9 +873,9 @@ seven sink_3_567(volatile       A&&);  // { dg-message "seven sink_3_567|no know
 int test3_567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_567(a);		// { dg-error "lvalue" }
     sink_3_567(ca);		// { dg-error "lvalue" }
     sink_3_567(va);		// { dg-error "lvalue" }
@@ -893,9 +893,9 @@ eight sink_3_568(const volatile A&&); // { dg-message "" }
 int test3_568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_568(a);		// { dg-error "lvalue" }
     sink_3_568(ca);		// { dg-error "lvalue" }
     sink_3_568(va);		// { dg-error "lvalue" }
@@ -910,9 +910,9 @@ eight sink_3_578(const volatile A&&); // { dg-message "" }
 int test3_578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_578(a);		// { dg-error "lvalue" }
     sink_3_578(ca);		// { dg-error "lvalue" }
     sink_3_578(va);		// { dg-error "lvalue" }
@@ -927,9 +927,9 @@ eight sink_3_678(const volatile A&&);  // { dg-message "eight sink_3_678|no know
 int test3_678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_3_678(a);          // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 933 }
     sink_3_678(ca);	    // { dg-error "lvalue" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv4n.C b/gcc/testsuite/g++.dg/cpp0x/rv4n.C
index daff307..076e9a0 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv4n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv4n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
 struct A
 {
     A();
-    A(const volatile A&&);	// { dg-error "argument 1" }
+    A(const volatile A&&);
 };
 
                A    source();
@@ -38,9 +38,9 @@ four  sink_4_1234(const volatile A&);  // { dg-message "note" }
 int test4_1234()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1234(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 44 }
     sink_4_1234(cv_source());  // { dg-error "no match" }
@@ -56,9 +56,9 @@ five  sink_4_1235(               A&&);  // { dg-message "note" }
 int test4_1235()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1235(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 62 }
     sink_4_1235(v_source());   // { dg-error "no match" }
@@ -76,9 +76,9 @@ six   sink_4_1236(const          A&&);  // { dg-message "note" }
 int test4_1236()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1236(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 82 }
     sink_4_1236(v_source());   // { dg-error "no match" }
@@ -96,9 +96,9 @@ seven sink_4_1237(volatile       A&&);  // { dg-message "note" }
 int test4_1237()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1237(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 102 }
     sink_4_1237(cv_source());  // { dg-error "no match" }
@@ -114,9 +114,9 @@ eight sink_4_1238(const volatile A&&); // { dg-message "" }
 int test4_1238()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1238(cva);		// { dg-error "lvalue" }
     return 0;
 }
@@ -129,9 +129,9 @@ five  sink_4_1245(               A&&);  // { dg-message "note" }
 int test4_1245()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1245(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 135 }
     sink_4_1245(cv_source());  // { dg-error "no match" }
@@ -147,9 +147,9 @@ six   sink_4_1246(const          A&&);  // { dg-message "note" }
 int test4_1246()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1246(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 153 }
     sink_4_1246(cv_source());  // { dg-error "no match" }
@@ -165,9 +165,9 @@ seven sink_4_1247(volatile       A&&);  // { dg-message "note" }
 int test4_1247()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1247(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 171 }
     return 0;
@@ -181,9 +181,9 @@ six   sink_4_1256(const          A&&);  // { dg-message "note" }
 int test4_1256()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1256(va);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 187 }
     sink_4_1256(cva);          // { dg-error "no match" }
@@ -203,9 +203,9 @@ seven sink_4_1257(volatile       A&&);  // { dg-message "" }
 int test4_1257()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1257(va);		// { dg-error "lvalue" }
     sink_4_1257(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 210 }
@@ -222,9 +222,9 @@ eight sink_4_1258(const volatile A&&); // { dg-message "" }
 int test4_1258()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1258(va);		// { dg-error "lvalue" }
     sink_4_1258(cva);		// { dg-error "lvalue" }
     return 0;
@@ -238,9 +238,9 @@ seven sink_4_1267(volatile       A&&);  // { dg-message "" }
 int test4_1267()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1267(va);		// { dg-error "lvalue" }
     sink_4_1267(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 245 }
@@ -259,9 +259,9 @@ eight sink_4_1268(const volatile A&&); // { dg-message "" }
 int test4_1268()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1268(va);		// { dg-error "lvalue" }
     sink_4_1268(cva);		// { dg-error "lvalue" }
     return 0;
@@ -275,9 +275,9 @@ eight sink_4_1278(const volatile A&&); // { dg-message "" }
 int test4_1278()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1278(va);		// { dg-error "lvalue" }
     sink_4_1278(cva);		// { dg-error "lvalue" }
     return 0;
@@ -291,9 +291,9 @@ five  sink_4_1345(               A&&);  // { dg-message "note" }
 int test4_1345()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1345(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 297 }
     sink_4_1345(v_source());   // { dg-error "no match" }
@@ -311,9 +311,9 @@ six   sink_4_1346(const          A&&);  // { dg-message "note" }
 int test4_1346()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1346(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 317 }
     sink_4_1346(cv_source());  // { dg-error "no match" }
@@ -329,9 +329,9 @@ seven sink_4_1347(volatile       A&&);  // { dg-message "note" }
 int test4_1347()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1347(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 335 }
     sink_4_1347(cv_source());  // { dg-error "no match" }
@@ -347,9 +347,9 @@ six   sink_4_1356(const          A&&);  // { dg-message "" }
 int test4_1356()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1356(ca);		// { dg-error "lvalue" }
     sink_4_1356(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 354 }
@@ -368,9 +368,9 @@ seven sink_4_1357(volatile       A&&);  // { dg-message "note" }
 int test4_1357()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1357(ca);           // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 374 }
     sink_4_1357(cva);          // { dg-error "no match" }
@@ -390,9 +390,9 @@ eight sink_4_1358(const volatile A&&); // { dg-message "" }
 int test4_1358()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1358(ca);		// { dg-error "lvalue" }
     sink_4_1358(cva);		// { dg-error "lvalue" }
     return 0;
@@ -406,9 +406,9 @@ seven sink_4_1367(volatile       A&&);  // { dg-message "note" }
 int test4_1367()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1367(ca);		// { dg-error "lvalue" }
     sink_4_1367(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 413 }
@@ -427,9 +427,9 @@ eight sink_4_1368(const volatile A&&); // { dg-message "" }
 int test4_1368()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1368(ca);		// { dg-error "lvalue" }
     sink_4_1368(cva);		// { dg-error "lvalue" }
     return 0;
@@ -443,9 +443,9 @@ eight sink_4_1378(const volatile A&&); // { dg-message "" }
 int test4_1378()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1378(ca);		// { dg-error "lvalue" }
     sink_4_1378(cva);		// { dg-error "lvalue" }
     return 0;
@@ -459,9 +459,9 @@ six   sink_4_1456(const          A&&);  // { dg-message "note" }
 int test4_1456()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1456(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 465 }
     sink_4_1456(cv_source());  // { dg-error "no match" }
@@ -477,9 +477,9 @@ seven sink_4_1457(volatile       A&&);  // { dg-message "note" }
 int test4_1457()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1457(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 483 }
     sink_4_1457(cv_source());  // { dg-error "no match" }
@@ -495,9 +495,9 @@ seven sink_4_1467(volatile       A&&);  // { dg-message "note" }
 int test4_1467()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1467(source());     // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 501 }
     sink_4_1467(cv_source());  // { dg-error "no match" }
@@ -513,9 +513,9 @@ seven sink_4_1567(volatile       A&&);  // { dg-message "" }
 int test4_1567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1567(ca);	       // { dg-error "lvalue" }
     sink_4_1567(va);	       // { dg-error "lvalue" }
     sink_4_1567(cva);          // { dg-error "no match" }
@@ -533,9 +533,9 @@ eight sink_4_1568(const volatile A&&); // { dg-message "" }
 int test4_1568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1568(ca);		// { dg-error "lvalue" }
     sink_4_1568(va);		// { dg-error "lvalue" }
     sink_4_1568(cva);		// { dg-error "lvalue" }
@@ -550,9 +550,9 @@ eight sink_4_1578(const volatile A&&); // { dg-message "" }
 int test4_1578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1578(ca);		// { dg-error "lvalue" }
     sink_4_1578(va);		// { dg-error "lvalue" }
     sink_4_1578(cva);		// { dg-error "lvalue" }
@@ -567,9 +567,9 @@ eight sink_4_1678(const volatile A&&);  // { dg-message "" }
 int test4_1678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_1678(ca);		// { dg-error "lvalue" }
     sink_4_1678(va);		// { dg-error "lvalue" }
     sink_4_1678(cva);		// { dg-error "lvalue" }
@@ -586,9 +586,9 @@ five  sink_4_2345(               A&&);  // { dg-message "note" }
 int test4_2345()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2345(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 592 }
     sink_4_2345(v_source());   // { dg-error "no match" }
@@ -606,9 +606,9 @@ six   sink_4_2346(const          A&&);  // { dg-message "note" }
 int test4_2346()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2346(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 612 }
     sink_4_2346(v_source());   // { dg-error "no match" }
@@ -626,9 +626,9 @@ seven sink_4_2347(volatile       A&&);  // { dg-message "note" }
 int test4_2347()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2347(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 632 }
     sink_4_2347(cv_source());  // { dg-error "no match" }
@@ -644,9 +644,9 @@ eight sink_4_2348(const volatile A&&);  // { dg-message "note" }
 int test4_2348()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2348(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 650 }
     return 0;
@@ -660,9 +660,9 @@ six   sink_4_2356(const          A&&);  // { dg-message "note" }
 int test4_2356()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2356(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 666 }
     sink_4_2356(cva);          // { dg-error "no match" }
@@ -682,9 +682,9 @@ seven sink_4_2357(volatile       A&&);  // { dg-message "note" }
 int test4_2357()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2357(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 688 }
     sink_4_2357(cva);          // { dg-error "no match" }
@@ -702,9 +702,9 @@ eight sink_4_2358(const volatile A&&);  // { dg-message "" }
 int test4_2358()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2358(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 708 }
     sink_4_2358(cva); // { dg-error "lvalue" }
@@ -719,9 +719,9 @@ seven sink_4_2367(volatile       A&&);  // { dg-message "note" }
 int test4_2367()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2367(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 725 }
     sink_4_2367(cva);          // { dg-error "no match" }
@@ -741,9 +741,9 @@ eight sink_4_2368(const volatile A&&);  // { dg-message "" }
 int test4_2368()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2368(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 747 }
     sink_4_2368(cva); // { dg-error "lvalue" }
@@ -758,9 +758,9 @@ eight sink_4_2378(const volatile A&&);  // { dg-message "" }
 int test4_2378()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2378(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 764 }
     sink_4_2378(cva); // { dg-error "lvalue" }
@@ -775,9 +775,9 @@ six   sink_4_2456(const          A&&);  // { dg-message "note" }
 int test4_2456()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2456(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 781 }
     sink_4_2456(cv_source());  // { dg-error "no match" }
@@ -793,9 +793,9 @@ seven sink_4_2457(volatile       A&&);  // { dg-message "note" }
 int test4_2457()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2457(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 799 }
     return 0;
@@ -809,9 +809,9 @@ seven sink_4_2467(volatile       A&&);  // { dg-message "note" }
 int test4_2467()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2467(source());     // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 815 }
     sink_4_2467(cv_source());  // { dg-error "no match" }
@@ -827,9 +827,9 @@ seven sink_4_2567(volatile       A&&);  // { dg-message "" }
 int test4_2567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2567(va);		// { dg-error "lvalue" }
     sink_4_2567(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 834 }
@@ -846,9 +846,9 @@ eight sink_4_2568(const volatile A&&); // { dg-message "" }
 int test4_2568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2568(va); // { dg-error "lvalue" }
     sink_4_2568(cva); // { dg-error "lvalue" }
     return 0;
@@ -862,9 +862,9 @@ eight sink_4_2578(const volatile A&&); // { dg-message "" }
 int test4_2578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2578(va); // { dg-error "lvalue" }
     sink_4_2578(cva); // { dg-error "lvalue" }
     return 0;
@@ -878,9 +878,9 @@ eight sink_4_2678(const volatile A&&);  // { dg-message "" }
 int test4_2678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_2678(va); // { dg-error "lvalue" }
     sink_4_2678(cva); // { dg-error "lvalue" }
     sink_4_2678(source());  // { dg-error "ambiguous" }
@@ -896,9 +896,9 @@ six   sink_4_3456(const          A&&);  // { dg-message "note" }
 int test4_3456()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_3456(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 902 }
     sink_4_3456(cv_source());  // { dg-error "no match" }
@@ -914,9 +914,9 @@ seven sink_4_3457(volatile       A&&);  // { dg-message "note" }
 int test4_3457()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_3457(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 920 }
     sink_4_3457(cv_source());  // { dg-error "no match" }
@@ -932,9 +932,9 @@ seven sink_4_3467(volatile       A&&);  // { dg-message "note" }
 int test4_3467()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_3467(source());     // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 938 }
     sink_4_3467(cv_source());  // { dg-error "no match" }
@@ -950,9 +950,9 @@ seven sink_4_3567(volatile       A&&);  // { dg-message "note" }
 int test4_3567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_3567(ca);		// { dg-error "lvalue" }
     sink_4_3567(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 957 }
@@ -969,9 +969,9 @@ eight sink_4_3568(const volatile A&&); // { dg-message "" }
 int test4_3568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_3568(ca); // { dg-error "lvalue" }
     sink_4_3568(cva); // { dg-error "lvalue" }
     return 0;
@@ -985,9 +985,9 @@ eight sink_4_3578(const volatile A&&); // { dg-message "" }
 int test4_3578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_3578(ca); // { dg-error "lvalue" }
     sink_4_3578(cva); // { dg-error "lvalue" }
     return 0;
@@ -1001,9 +1001,9 @@ eight sink_4_3678(const volatile A&&);  // { dg-message "" }
 int test4_3678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_3678(ca);		// { dg-error "lvalue" }
     sink_4_3678(cva);		// { dg-error "lvalue" }
     sink_4_3678(source());  // { dg-error "ambiguous" }
@@ -1019,9 +1019,9 @@ seven sink_4_4567(volatile       A&&);  // { dg-message "note" }
 int test4_4567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_4567(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 1025 }
     return 0;
@@ -1035,9 +1035,9 @@ eight sink_4_4678(const volatile A&&);  // { dg-message "note" }
 int test4_4678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_4678(source());  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 1041 }
     return 0;
@@ -1051,9 +1051,9 @@ eight sink_4_5678(const volatile A&&); // { dg-message "" }
 int test4_5678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_4_5678(a);		// { dg-error "lvalue" }
     sink_4_5678(ca);		// { dg-error "lvalue" }
     sink_4_5678(va);		// { dg-error "lvalue" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv5n.C b/gcc/testsuite/g++.dg/cpp0x/rv5n.C
index 660a689..d9b8cd2 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv5n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv5n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
 struct A
 {
     A();
-    A(const volatile A&&);	// { dg-error "argument 1" }
+    A(const volatile A&&);
 };
 
                A    source();
@@ -39,9 +39,9 @@ five  sink_5_12345(               A&&);  // { dg-message "note" }
 int test5_12345()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12345(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 45 }
     sink_5_12345(cv_source());  // { dg-error "no match" }
@@ -58,9 +58,9 @@ six   sink_5_12346(const          A&&);  // { dg-message "note" }
 int test5_12346()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12346(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 64 }
     sink_5_12346(cv_source());  // { dg-error "no match" }
@@ -77,9 +77,9 @@ seven sink_5_12347(volatile       A&&);  // { dg-message "note" }
 int test5_12347()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12347(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 83 }
     return 0;
@@ -94,9 +94,9 @@ six   sink_5_12356(const          A&&);  // { dg-message "note" }
 int test5_12356()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12356(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 100 }
     sink_5_12356(v_source());   // { dg-error "no match" }
@@ -115,9 +115,9 @@ seven sink_5_12357(volatile       A&&);  // { dg-message "note" }
 int test5_12357()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12357(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 121 }
     sink_5_12357(cv_source());  // { dg-error "no match" }
@@ -134,9 +134,9 @@ eight sink_5_12358(const volatile A&&); // { dg-message "" }
 int test5_12358()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12358(cva);		// { dg-error "lvalue" }
     return 0;
 }
@@ -150,9 +150,9 @@ seven sink_5_12367(volatile       A&&);  // { dg-message "note" }
 int test5_12367()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12367(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 156 }
     sink_5_12367(source());     // { dg-error "ambiguous" }
@@ -171,9 +171,9 @@ eight sink_5_12368(const volatile A&&); // { dg-message "" }
 int test5_12368()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12368(cva);		// { dg-error "lvalue" }
     return 0;
 }
@@ -187,9 +187,9 @@ eight sink_5_12378(const volatile A&&); // { dg-message "" }
 int test5_12378()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12378(cva);		// { dg-error "lvalue" }
     return 0;
 }
@@ -203,9 +203,9 @@ six   sink_5_12456(const          A&&);  // { dg-message "note" }
 int test5_12456()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12456(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 209 }
     sink_5_12456(cv_source());  // { dg-error "no match" }
@@ -222,9 +222,9 @@ seven sink_5_12457(volatile       A&&);  // { dg-message "note" }
 int test5_12457()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12457(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 228 }
     return 0;
@@ -239,9 +239,9 @@ seven sink_5_12467(volatile       A&&);  // { dg-message "note" }
 int test5_12467()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12467(source());     // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 245 }
     sink_5_12467(cv_source());  // { dg-error "no match" }
@@ -258,9 +258,9 @@ seven sink_5_12567(volatile       A&&);  // { dg-message "" }
 int test5_12567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12567(va);		// { dg-error "lvalue" }
     sink_5_12567(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 265 }
@@ -278,9 +278,9 @@ eight sink_5_12568(const volatile A&&); // { dg-message "" }
 int test5_12568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12568(va);		// { dg-error "lvalue" }
     sink_5_12568(cva);		// { dg-error "lvalue" }
     return 0;
@@ -295,9 +295,9 @@ eight sink_5_12578(const volatile A&&); // { dg-message "" }
 int test5_12578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12578(va);		// { dg-error "lvalue" }
     sink_5_12578(cva);		// { dg-error "lvalue" }
     return 0;
@@ -312,9 +312,9 @@ eight sink_5_12678(const volatile A&&);  // { dg-message "" }
 int test5_12678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_12678(va);		// { dg-error "lvalue" }
     sink_5_12678(cva);		// { dg-error "lvalue" }
     sink_5_12678(source());  // { dg-error "ambiguous" }
@@ -331,9 +331,9 @@ six   sink_5_13456(const          A&&);  // { dg-message "note" }
 int test5_13456()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_13456(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 337 }
     sink_5_13456(cv_source());  // { dg-error "no match" }
@@ -350,9 +350,9 @@ seven sink_5_13457(volatile       A&&);  // { dg-message "note" }
 int test5_13457()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_13457(c_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 356 }
     sink_5_13457(cv_source());  // { dg-error "no match" }
@@ -369,9 +369,9 @@ seven sink_5_13467(volatile       A&&);  // { dg-message "note" }
 int test5_13467()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_13467(source());     // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 375 }
     sink_5_13467(cv_source());  // { dg-error "no match" }
@@ -388,9 +388,9 @@ seven sink_5_13567(volatile       A&&);  // { dg-message "note" }
 int test5_13567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_13567(ca);		// { dg-error "lvalue" }
     sink_5_13567(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 395 }
@@ -408,9 +408,9 @@ eight sink_5_13568(const volatile A&&); // { dg-message "" }
 int test5_13568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_13568(ca);		// { dg-error "lvalue" }
     sink_5_13568(cva);		// { dg-error "lvalue" }
     return 0;
@@ -425,9 +425,9 @@ eight sink_5_13578(const volatile A&&); // { dg-message "" }
 int test5_13578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_13578(ca);		// { dg-error "lvalue" }
     sink_5_13578(cva);		// { dg-error "lvalue" }
     return 0;
@@ -442,9 +442,9 @@ eight sink_5_13678(const volatile A&&);  // { dg-message "" }
 int test5_13678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_13678(ca);		// { dg-error "lvalue" }
     sink_5_13678(cva);		// { dg-error "lvalue" }
     sink_5_13678(source());  // { dg-error "ambiguous" }
@@ -461,9 +461,9 @@ seven sink_5_14567(volatile       A&&);  // { dg-message "note" }
 int test5_14567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_14567(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 467 }
     return 0;
@@ -478,9 +478,9 @@ eight sink_5_14678(const volatile A&&);  // { dg-message "note" }
 int test5_14678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_14678(source());  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 484 }
     return 0;
@@ -495,9 +495,9 @@ eight sink_5_15678(const volatile A&&); // { dg-message "" }
 int test5_15678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_15678(ca);		// { dg-error "lvalue" }
     sink_5_15678(va);		// { dg-error "lvalue" }
     sink_5_15678(cva);		// { dg-error "lvalue" }
@@ -513,9 +513,9 @@ six   sink_5_23456(const          A&&);  // { dg-message "note" }
 int test5_23456()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23456(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 519 }
     sink_5_23456(v_source());   // { dg-error "no match" }
@@ -534,9 +534,9 @@ seven sink_5_23457(volatile       A&&);  // { dg-message "note" }
 int test5_23457()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23457(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 540 }
     sink_5_23457(cv_source());  // { dg-error "no match" }
@@ -553,9 +553,9 @@ eight sink_5_23458(const volatile A&&);  // { dg-message "note" }
 int test5_23458()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23458(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 559 }
     return 0;
@@ -570,9 +570,9 @@ seven sink_5_23467(volatile       A&&);  // { dg-message "note" }
 int test5_23467()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23467(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 576 }
     sink_5_23467(source());     // { dg-error "ambiguous" }
@@ -591,9 +591,9 @@ eight sink_5_23468(const volatile A&&);  // { dg-message "note" }
 int test5_23468()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23468(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 597 }
    return 0;
@@ -608,9 +608,9 @@ eight sink_5_23478(const volatile A&&);  // { dg-message "note" }
 int test5_23478()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23478(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 614 }
     return 0;
@@ -625,9 +625,9 @@ seven sink_5_23567(volatile       A&&);  // { dg-message "note" }
 int test5_23567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23567(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 631 }
     sink_5_23567(cva);          // { dg-error "no match" }
@@ -646,9 +646,9 @@ eight sink_5_23568(const volatile A&&);  // { dg-message "" }
 int test5_23568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23568(cva); // { dg-error "lvalue" }
     sink_5_23568(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 653 }
@@ -664,9 +664,9 @@ eight sink_5_23578(const volatile A&&);  // { dg-message "" }
 int test5_23578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23578(cva); // { dg-error "lvalue" }
     sink_5_23578(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 671 }
@@ -682,9 +682,9 @@ eight sink_5_23678(const volatile A&&);  // { dg-message "" }
 int test5_23678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_23678(a);         // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 688 }
     sink_5_23678(cva);	     // { dg-error "lvalue" }
@@ -702,9 +702,9 @@ seven sink_5_24567(volatile       A&&);  // { dg-message "note" }
 int test5_24567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_24567(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 708 }
     return 0;
@@ -719,9 +719,9 @@ eight sink_5_24678(const volatile A&&);  // { dg-message "note" }
 int test5_24678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_24678(source());  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 725 }
     return 0;
@@ -736,9 +736,9 @@ eight sink_5_25678(const volatile A&&); // { dg-message "" }
 int test5_25678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_25678(va);		// { dg-error "lvalue" }
     sink_5_25678(cva);		// { dg-error "lvalue" }
     return 0;
@@ -753,9 +753,9 @@ seven sink_5_34567(volatile       A&&);  // { dg-message "note" }
 int test5_34567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_34567(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 759 }
     return 0;
@@ -770,9 +770,9 @@ eight sink_5_34678(const volatile A&&);  // { dg-message "note" }
 int test5_34678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_34678(source());  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 776 }
     return 0;
@@ -787,9 +787,9 @@ eight sink_5_35678(const volatile A&&); // { dg-message "" }
 int test5_35678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_5_35678(ca);		// { dg-error "lvalue" }
     sink_5_35678(cva);		// { dg-error "lvalue" }
     return 0;
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv6n.C b/gcc/testsuite/g++.dg/cpp0x/rv6n.C
index d0fdbb7..fbc932d 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv6n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv6n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
 struct A
 {
     A();
-    A(const volatile A&&);	// { dg-error "argument 1" }
+    A(const volatile A&&);
 };
 
                A    source();
@@ -40,9 +40,9 @@ six   sink_6_123456(const          A&&);  // { dg-message "note" }
 int test6_123456()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_123456(v_source());   // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 46 }
     sink_6_123456(cv_source());  // { dg-error "no match" }
@@ -60,9 +60,9 @@ seven sink_6_123457(volatile       A&&);  // { dg-message "note" }
 int test6_123457()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_123457(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 66 }
     return 0;
@@ -78,9 +78,9 @@ eight sink_6_235678(const volatile A&&);  // { dg-message "" }
 int test6_235678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_235678(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 84 }
     sink_6_235678(cva);		// { dg-error "lvalue" }
@@ -97,9 +97,9 @@ eight sink_6_234678(const volatile A&&);  // { dg-message "note" }
 int test6_234678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_234678(a);         // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 103 }
     sink_6_234678(source());  // { dg-error "ambiguous" }
@@ -117,9 +117,9 @@ eight sink_6_234578(const volatile A&&);  // { dg-message "note" }
 int test6_234578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_234578(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 123 }
     return 0;
@@ -135,9 +135,9 @@ eight sink_6_234568(const volatile A&&);  // { dg-message "note" }
 int test6_234568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_234568(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 141 }
     return 0;
@@ -153,9 +153,9 @@ seven sink_6_234567(volatile       A&&);  // { dg-message "note" }
 int test6_234567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_234567(a);            // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 159 }
     sink_6_234567(cv_source());  // { dg-error "no match" }
@@ -173,9 +173,9 @@ eight sink_6_134678(const volatile A&&);  // { dg-message "note" }
 int test6_134678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_134678(source());  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 179 }
     return 0;
@@ -191,9 +191,9 @@ eight sink_6_124678(const volatile A&&);  // { dg-message "note" }
 int test6_124678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_124678(source());  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 197 }
     return 0;
@@ -209,9 +209,9 @@ eight sink_6_123678(const volatile A&&);  // { dg-message "" }
 int test6_123678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_123678(cva);		// { dg-error "lvalue" }
     sink_6_123678(source());  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 216 }
@@ -228,9 +228,9 @@ seven sink_6_123567(volatile       A&&);  // { dg-message "note" }
 int test6_123567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_123567(cva);          // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 234 }
     sink_6_123567(cv_source());  // { dg-error "no match" }
@@ -248,9 +248,9 @@ eight sink_6_123568(const volatile A&&); // { dg-message "" }
 int test6_123568()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_123568(cva); // { dg-error "lvalue" }
     return 0;
 }
@@ -265,9 +265,9 @@ eight sink_6_123578(const volatile A&&); // { dg-message "" }
 int test6_123578()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_123578(cva);		// { dg-error "lvalue" }
     return 0;
 }
@@ -282,9 +282,9 @@ seven sink_6_123467(volatile       A&&);  // { dg-message "note" }
 int test6_123467()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_123467(source());     // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 288 }
     sink_6_123467(cv_source());  // { dg-error "no match" }
@@ -302,9 +302,9 @@ seven sink_6_124567(volatile       A&&);  // { dg-message "note" }
 int test6_124567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_124567(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 308 }
     return 0;
@@ -320,9 +320,9 @@ eight sink_6_125678(const volatile A&&); // { dg-message "" }
 int test6_125678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_125678(va);		// { dg-error "lvalue" }
     sink_6_125678(cva);		// { dg-error "lvalue" }
     return 0;
@@ -338,9 +338,9 @@ seven sink_6_134567(volatile       A&&);  // { dg-message "note" }
 int test6_134567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_134567(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 344 }
     return 0;
@@ -356,9 +356,9 @@ eight sink_6_135678(const volatile A&&); // { dg-message "" }
 int test6_135678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_6_135678(ca);		// { dg-error "lvalue" }
     sink_6_135678(cva);		// { dg-error "lvalue" }
     return 0;
diff --git a/gcc/testsuite/g++.dg/cpp0x/rv7n.C b/gcc/testsuite/g++.dg/cpp0x/rv7n.C
index 6071e05..206cc79 100644
--- a/gcc/testsuite/g++.dg/cpp0x/rv7n.C
+++ b/gcc/testsuite/g++.dg/cpp0x/rv7n.C
@@ -20,7 +20,7 @@ struct eight {char x[8];};
 struct A
 {
     A();
-    A(const volatile A&&);	// { dg-error "argument 1" }
+    A(const volatile A&&);
 };
 
                A    source();
@@ -41,9 +41,9 @@ seven sink_7_1234567(volatile       A&&);  // { dg-message "note" }
 int test7_1234567()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_7_1234567(cv_source());  // { dg-error "no match" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 47 }
     return 0;
@@ -60,9 +60,9 @@ eight sink_7_1235678(const volatile A&&); // { dg-message "" }
 int test7_1235678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_7_1235678(cva);	// { dg-error "lvalue" }
     return 0;
 }
@@ -78,9 +78,9 @@ eight sink_7_2345678(const volatile A&&);  // { dg-message "note" }
 int test7_2345678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_7_2345678(a);  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 84 }
     return 0;
@@ -97,9 +97,9 @@ eight sink_7_1234678(const volatile A&&);  // { dg-message "note" }
 int test7_1234678()
 {
                    A a;
-    const          A ca = a; // { dg-error "lvalue" }
+    const          A ca = a; // { dg-error "deleted" }
           volatile A va;
-    const volatile A cva = a; // { dg-error "lvalue" }
+    const volatile A cva = a; // { dg-error "deleted" }
     sink_7_1234678(source());  // { dg-error "ambiguous" }
     // { dg-message "candidate" "candidate note" { target *-*-* } 103 }
     return 0;
diff --git a/libstdc++-v3/include/bits/shared_ptr.h b/libstdc++-v3/include/bits/shared_ptr.h
index 42acace..32addf9 100644
--- a/libstdc++-v3/include/bits/shared_ptr.h
+++ b/libstdc++-v3/include/bits/shared_ptr.h
@@ -211,6 +211,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        *  @param  __r  A %shared_ptr.
        *  @post   get() == __r.get() && use_count() == __r.use_count()
        */
+      shared_ptr(const shared_ptr&) noexcept = default;
       template<typename _Tp1, typename = typename
 	       std::enable_if<std::is_convertible<_Tp1*, _Tp*>::value>::type>
 	shared_ptr(const shared_ptr<_Tp1>& __r) noexcept
@@ -264,6 +265,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       constexpr shared_ptr(nullptr_t __p) noexcept
       : __shared_ptr<_Tp>(__p) { }
 
+      shared_ptr& operator=(const shared_ptr&) noexcept = default;
       template<typename _Tp1>
 	shared_ptr&
 	operator=(const shared_ptr<_Tp1>& __r) noexcept
diff --git a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
index a3abadf..b72553b 100644
--- a/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/weak_ptr/comparison/cmp_neg.cc
@@ -41,19 +41,3 @@ main()
   test01();
   return 0;
 }
-
-// { dg-warning "note" "" { target *-*-* } 370 }
-// { dg-warning "note" "" { target *-*-* } 365 }
-// { dg-warning "note" "" { target *-*-* } 356 }
-// { dg-warning "note" "" { target *-*-* } 1103 }
-// { dg-warning "note" "" { target *-*-* } 1098 }
-// { dg-warning "note" "" { target *-*-* } 1089 }
-// { dg-warning "note" "" { target *-*-* } 485 }
-// { dg-warning "note" "" { target *-*-* } 479 }
-// { dg-warning "note" "" { target *-*-* } 468 }
-// { dg-warning "note" "" { target *-*-* } 841 }
-// { dg-warning "note" "" { target *-*-* } 1056 }
-// { dg-warning "note" "" { target *-*-* } 1050 }
-// { dg-warning "note" "" { target *-*-* } 342 }
-// { dg-warning "note" "" { target *-*-* } 292 }
-// { dg-warning "note" "" { target *-*-* } 224 }
diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h
index 38bfac8..c0b8ee3 100644
--- a/libstdc++-v3/testsuite/util/testsuite_allocator.h
+++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h
@@ -409,6 +409,14 @@ namespace __gnu_test
 
       propagating_allocator(const propagating_allocator&) noexcept = default;
 
+      propagating_allocator&
+      operator=(const propagating_allocator& a) noexcept
+	{
+	  static_assert(Propagate, "assigning propagating_allocator<T, true>");
+	  propagating_allocator(a).swap_base(*this);
+	  return *this;
+	}
+
       template<bool P2>
   	propagating_allocator&
   	operator=(const propagating_allocator<Tp, P2>& a) noexcept
diff --git a/libstdc++-v3/testsuite/util/testsuite_rvalref.h b/libstdc++-v3/testsuite/util/testsuite_rvalref.h
index 2234e81..73c70e0 100644
--- a/libstdc++-v3/testsuite/util/testsuite_rvalref.h
+++ b/libstdc++-v3/testsuite/util/testsuite_rvalref.h
@@ -255,6 +255,9 @@ namespace __gnu_test
     { throw 1; }
 
     throwing_move_constructor(const throwing_move_constructor&) = default;
+
+    throwing_move_constructor&
+    operator=(const throwing_move_constructor&) = default;
   };
 
 } // namespace __gnu_test
