| // { dg-do compile { target c++11 } } |
| // PR c++/33235 |
| #include <cassert> |
| |
| int move_construct = 0; |
| int move_assign = 0; |
| |
| struct base2 // { dg-message "declares a move" } |
| { |
| base2() {} |
| base2(base2&&) {++move_construct;} |
| base2& operator=(base2&&) {++move_assign; return *this;} |
| }; |
| |
| int test2() |
| { |
| base2 b; |
| 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 "deleted" } |
| assert(move_assign == 0); |
| b = static_cast<base2&&>(b2); |
| assert(move_assign == 1); |
| return 0; |
| } |
| |
| int main() |
| { |
| test2(); |
| return 0; |
| } |