1 template<typename...>
2 struct __and_;
3
4 template<typename _Pp>
5 struct __not_;
6
7 template<typename _Tp>
8 struct is_move_constructible;
9
10 template<typename _Tp>
11 struct is_nothrow_move_constructible;
12
13 template<typename _Tp>
14 struct is_move_assignable;
15
16 template<typename _Tp>
17 struct is_nothrow_move_assignable;
18
19 template<typename _Tp>
20 struct remove_reference;
21
22 template<bool, typename _Tp = void>
23 struct enable_if;
24
25 template<bool _Cond, typename _Tp = void>
26 using __enable_if_t = typename enable_if<_Cond, _Tp>::type;
27
28 template<typename... _Cond>
29 using _Require = __enable_if_t<__and_<_Cond...>::value>;
30
31 template<typename _Tp>
32 struct __is_tuple_like;
33
34 template<typename _Tp>
35 constexpr inline
36 _Require<__not_<__is_tuple_like<_Tp>>,
37 is_move_constructible<_Tp>,
38 is_move_assignable<_Tp>>
39 swap(_Tp&, _Tp&)
40 noexcept(__and_<is_nothrow_move_constructible<_Tp>,
41 is_nothrow_move_assignable<_Tp>>::value);