aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.4.3/libstdc++-v3/include/bits/move.h
diff options
context:
space:
mode:
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.h24
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