libstdc++: [_Hashtable] Fix some implementation inconsistencies
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / Wpessimizing-move10.C
blob77314141da337914580e6da7e4b4c82c9f8a809e
1 // { dg-do compile { target c++11 } }
2 // { dg-options "-Wpessimizing-move" }
4 // Define std::move.
5 namespace std {
6   template<typename _Tp>
7     struct remove_reference
8     { typedef _Tp   type; };
10   template<typename _Tp>
11     struct remove_reference<_Tp&>
12     { typedef _Tp   type; };
14   template<typename _Tp>
15     struct remove_reference<_Tp&&>
16     { typedef _Tp   type; };
18   template<typename _Tp>
19     constexpr typename std::remove_reference<_Tp>::type&&
20     move(_Tp&& __t) noexcept
21     { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
24 struct S { };
27 f ()
29    return {std::move(S())}; // { dg-warning "moving a temporary object prevents copy elision" }