summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/bits/move.h
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include/bits/move.h')
-rw-r--r--libstdc++-v3/include/bits/move.h29
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.