From b271eff4c697ea278dc38088c95246b1c5a278e5 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Wed, 11 Aug 2010 14:05:55 +0000 Subject: [PATCH] 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 --- include/type_traits | 46 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/include/type_traits b/include/type_traits index fc144716..35777c8e 100644 --- a/include/type_traits +++ b/include/type_traits @@ -1140,20 +1140,50 @@ move(_Tp&& __t) return static_cast::type&&>(__t); } -template ::value ? is_lvalue_reference<_Up>::value : true - >::type, - class = typename _STD::enable_if< - is_convertible::type*, - typename remove_reference<_Tp>::type*>::value>::type> +template ::value + >::type + > inline _LIBCPP_INLINE_VISIBILITY _Tp&& -forward(_Up&& __t) +forward(typename common_type<_Tp>::type& __t) { return static_cast<_Tp&&>(__t); } +template ::value + >::type + > +inline _LIBCPP_INLINE_VISIBILITY +_Tp&& +forward(typename common_type<_Tp>::type&& __t) +{ + return static_cast<_Tp&&>(__t); +} + +template ::value + >::type + > +inline _LIBCPP_INLINE_VISIBILITY +_Tp +forward(typename common_type<_Tp>::type __t) +{ + return __t; +} + +template ::value + >::type + > +_Tp +forward(typename remove_reference<_Tp>::type&& __t) = delete; + #else // _LIBCPP_MOVE template