diff options
Diffstat (limited to 'libstdc++-v3/include/bits/move.h')
-rw-r--r-- | libstdc++-v3/include/bits/move.h | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/libstdc++-v3/include/bits/move.h b/libstdc++-v3/include/bits/move.h index 9329cb491db..f351d01964f 100644 --- a/libstdc++-v3/include/bits/move.h +++ b/libstdc++-v3/include/bits/move.h @@ -51,29 +51,20 @@ _GLIBCXX_END_NAMESPACE _GLIBCXX_BEGIN_NAMESPACE(std) - /// forward (as per N2835) - /// Forward lvalues as rvalues. + /// forward (as per N3143) template<typename _Tp> - inline typename enable_if<!is_lvalue_reference<_Tp>::value, _Tp&&>::type - forward(typename std::common_type<_Tp>::type& __t) + inline _Tp&& + forward(typename std::remove_reference<_Tp>::type& __t) { return static_cast<_Tp&&>(__t); } - /// Forward rvalues as rvalues. template<typename _Tp> - inline typename enable_if<!is_lvalue_reference<_Tp>::value, _Tp&&>::type - forward(typename std::common_type<_Tp>::type&& __t) - { return static_cast<_Tp&&>(__t); } - - // Forward lvalues as lvalues. - template<typename _Tp> - inline typename enable_if<is_lvalue_reference<_Tp>::value, _Tp>::type - forward(typename std::common_type<_Tp>::type __t) - { return __t; } - - // Prevent forwarding rvalues as const lvalues. - template<typename _Tp> - inline typename enable_if<is_lvalue_reference<_Tp>::value, _Tp>::type - forward(typename std::remove_reference<_Tp>::type&& __t) = delete; + inline _Tp&& + forward(typename std::remove_reference<_Tp>::type&& __t) + { + static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument" + " substituting _Tp is an lvalue reference type"); + return static_cast<_Tp&&>(__t); + } /** * @brief Move a value. |