1 // { dg-do compile { target c++11 } } 2 // PR c++/33235 3 #include <cassert> 4 5 int move_construct = 0; 6 int move_assign = 0; 7 8 struct base2 // { dg-message "declares a move" } 9 { base2base210 base2() {} base2base211 base2(base2&&) {++move_construct;} 12 base2& operator=(base2&&) {++move_assign; return *this;} 13 }; 14 test2()15int test2() 16 { 17 base2 b; 18 base2 b2(b); // { dg-error "deleted" } 19 assert(move_construct == 0); 20 base2 b3(static_cast<base2&&>(b)); 21 base2 b4 = static_cast<base2&&>(b); 22 assert(move_construct == 2); 23 b = b2; // { dg-error "deleted" } 24 assert(move_assign == 0); 25 b = static_cast<base2&&>(b2); 26 assert(move_assign == 1); 27 return 0; 28 } 29 main()30int main() 31 { 32 test2(); 33 return 0; 34 } 35