1 template<typename _Tp>
2 constexpr typename remove_reference<_Tp>::type&&
3   move(_Tp&& __t) noexcept;
4 
5 template<typename _Tp>
6 constexpr inline
7 typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
8 			  is_move_constructible<_Tp>,
9 			  is_move_assignable<_Tp>>::value>::type
swap(_Tp & __a,_Tp & __b)10   swap(_Tp& __a, _Tp& __b)
11   noexcept(__and_<is_nothrow_move_constructible<_Tp>,
12 	   is_nothrow_move_assignable<_Tp>>::value)
13 {
14   _Tp __tmp = move(__a);
15   __a = move(__b);
16   __b = move(__tmp);
17 }
18