Modified the definition of std::foward to address National Body Comment US 90
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@110805 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1140,20 +1140,50 @@ move(_Tp&& __t)
|
|||||||
return static_cast<typename remove_reference<_Tp>::type&&>(__t);
|
return static_cast<typename remove_reference<_Tp>::type&&>(__t);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class _Tp, class _Up,
|
template <class _Tp,
|
||||||
class = typename _STD::enable_if<
|
class = typename enable_if<
|
||||||
is_lvalue_reference<_Tp>::value ? is_lvalue_reference<_Up>::value : true
|
!is_lvalue_reference<_Tp>::value
|
||||||
>::type,
|
>::type
|
||||||
class = typename _STD::enable_if<
|
>
|
||||||
is_convertible<typename remove_reference<_Up>::type*,
|
|
||||||
typename remove_reference<_Tp>::type*>::value>::type>
|
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
_Tp&&
|
_Tp&&
|
||||||
forward(_Up&& __t)
|
forward(typename common_type<_Tp>::type& __t)
|
||||||
{
|
{
|
||||||
return static_cast<_Tp&&>(__t);
|
return static_cast<_Tp&&>(__t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class _Tp,
|
||||||
|
class = typename enable_if<
|
||||||
|
!is_lvalue_reference<_Tp>::value
|
||||||
|
>::type
|
||||||
|
>
|
||||||
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
_Tp&&
|
||||||
|
forward(typename common_type<_Tp>::type&& __t)
|
||||||
|
{
|
||||||
|
return static_cast<_Tp&&>(__t);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class _Tp,
|
||||||
|
class = typename enable_if<
|
||||||
|
is_lvalue_reference<_Tp>::value
|
||||||
|
>::type
|
||||||
|
>
|
||||||
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
|
_Tp
|
||||||
|
forward(typename common_type<_Tp>::type __t)
|
||||||
|
{
|
||||||
|
return __t;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class _Tp,
|
||||||
|
class = typename enable_if<
|
||||||
|
is_lvalue_reference<_Tp>::value
|
||||||
|
>::type
|
||||||
|
>
|
||||||
|
_Tp
|
||||||
|
forward(typename remove_reference<_Tp>::type&& __t) = delete;
|
||||||
|
|
||||||
#else // _LIBCPP_MOVE
|
#else // _LIBCPP_MOVE
|
||||||
|
|
||||||
template <class _Tp>
|
template <class _Tp>
|
||||||
|
Reference in New Issue
Block a user