37 #ifdef __GXX_EXPERIMENTAL_CXX0X__
38 #include <type_traits>
40 _GLIBCXX_BEGIN_NAMESPACE(std)
43 template<typename _Tp>
49 template<
typename _Tp>
51 forward(
typename std::identity<_Tp>::type&& __t)
54 template<
typename _Tp>
55 inline typename std::remove_reference<_Tp>::type&&
59 _GLIBCXX_END_NAMESPACE
61 #define _GLIBCXX_MOVE(_Tp) std::move(_Tp)
63 #define _GLIBCXX_MOVE(_Tp) (_Tp)
66 _GLIBCXX_BEGIN_NAMESPACE(std)
74 template<typename _Tp>
76 swap(_Tp& __a, _Tp& __b)
79 __glibcxx_function_requires(_SGIAssignableConcept<_Tp>)
81 _Tp __tmp = _GLIBCXX_MOVE(__a);
82 __a = _GLIBCXX_MOVE(__b);
83 __b = _GLIBCXX_MOVE(__tmp);
88 template<
typename _Tp,
size_t _Nm>
90 swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
92 for (
size_t __n = 0; __n < _Nm; ++__n)
93 swap(__a[__n], __b[__n]);
96 _GLIBCXX_END_NAMESPACE