diff options
Diffstat (limited to 'test/CXX/special/class.copy/p11.0x.move.cpp')
-rw-r--r-- | test/CXX/special/class.copy/p11.0x.move.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/test/CXX/special/class.copy/p11.0x.move.cpp b/test/CXX/special/class.copy/p11.0x.move.cpp index 3e9cc6b662..ff9478be8b 100644 --- a/test/CXX/special/class.copy/p11.0x.move.cpp +++ b/test/CXX/special/class.copy/p11.0x.move.cpp @@ -123,7 +123,7 @@ struct NonMove { CopyOnly CO; NonMove(NonMove&&); }; -NonMove::NonMove(NonMove&&) = default; // expected-error{{would delete}} +NonMove::NonMove(NonMove&&) = default; // ok under DR1402 struct Moveable { Moveable(); @@ -135,3 +135,30 @@ struct HasMove { HasMove(HasMove&&); }; HasMove::HasMove(HasMove&&) = default; + +namespace DR1402 { + struct member { + member(); + member(const member&); + member& operator=(const member&); + ~member(); + }; + + struct A { + member m_; + + A() = default; + A(const A&) = default; + A& operator=(const A&) = default; + A(A&&) = default; + A& operator=(A&&) = default; + ~A() = default; + }; + + // ok, A's explicitly-defaulted move operations copy m_. + void f() { + A a, b(a), c(static_cast<A&&>(a)); + a = b; + b = static_cast<A&&>(c); + } +} |