2 // { dg-do compile { target c++11 } }
3 // { dg-options "-Wpessimizing-move" }
8 struct remove_reference
11 template<typename _Tp>
12 struct remove_reference<_Tp&>
13 { typedef _Tp type; };
15 template<typename _Tp>
16 struct remove_reference<_Tp&&>
17 { typedef _Tp type; };
19 template<typename _Tp>
20 constexpr typename std::remove_reference<_Tp>::type&&
21 move(_Tp&& __t) noexcept
22 { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
25 struct A { A(); A(const A&) = delete; A(A&&); };
33 return std::move (A{}); // { dg-warning "moving a temporary object prevents copy elision" }
34 return std::move (A()); // { dg-warning "moving a temporary object prevents copy elision" }
35 return std::move (foo ()); // { dg-warning "moving a temporary object prevents copy elision" }
40 return std::move (A()); // { dg-warning "moving a temporary object prevents copy elision" }
41 return std::move (A{}); // { dg-warning "moving a temporary object prevents copy elision" }
42 return std::move (foo ()); // { dg-warning "moving a temporary object prevents copy elision" }
45 template <typename T1, typename T2>
49 return std::move (T2{}); // { dg-warning "moving a temporary object prevents copy elision" }
61 label_text take() { return std::move(label_text(&take_buffer)); } // { dg-warning "moving a temporary object prevents copy elision" }