diff options
Diffstat (limited to 'gcc-4.4.3/libstdc++-v3/include/bits/move.h')
-rw-r--r-- | gcc-4.4.3/libstdc++-v3/include/bits/move.h | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/gcc-4.4.3/libstdc++-v3/include/bits/move.h b/gcc-4.4.3/libstdc++-v3/include/bits/move.h index ef86c4d12..b82b263a6 100644 --- a/gcc-4.4.3/libstdc++-v3/include/bits/move.h +++ b/gcc-4.4.3/libstdc++-v3/include/bits/move.h @@ -48,13 +48,35 @@ _GLIBCXX_BEGIN_NAMESPACE(std) template<typename _Tp> inline _Tp&& - forward(typename std::identity<_Tp>::type&& __t) + forward(typename std::remove_reference<_Tp>::type& __t) +#ifdef __clang__ + { return static_cast<_Tp&&>(__t); } +#else { return __t; } +#endif + + template<typename _Tp> + inline _Tp&& + forward(typename std::remove_reference<_Tp>::type&& __t) + { +#ifdef __clang__ + static_assert(!std::is_lvalue_reference<_Tp>::value, + "Can't instantiate this forward() with an" + " lvalue reference type."); + return static_cast<_Tp&&>(__t); +#else + return __t; +#endif + } template<typename _Tp> inline typename std::remove_reference<_Tp>::type&& move(_Tp&& __t) +#ifdef __clang__ + { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); } +#else { return __t; } +#endif _GLIBCXX_END_NAMESPACE |