Lines 90-118
_GLIBCXX_BEGIN_NAMESPACE_VERSION
Link Here
|
90 |
template <typename _T1, typename _T2, typename _U1, typename _U2> |
90 |
template <typename _T1, typename _T2, typename _U1, typename _U2> |
91 |
constexpr bool _ConstructiblePair() |
91 |
constexpr bool _ConstructiblePair() |
92 |
{ |
92 |
{ |
93 |
return __and_<is_constructible<_T1, const _U1&>, |
93 |
return __and_<__or_<is_same<typename decay<_T1>::type, |
94 |
is_constructible<_T2, const _U2&>>::value; |
94 |
typename decay<_U1>::type>, |
|
|
95 |
is_constructible<_T1, const _U1&>>, |
96 |
__or_<is_same<typename decay<_T2>::type, |
97 |
typename decay<_U2>::type>, |
98 |
is_constructible<_T2, const _U2&>>>::value; |
95 |
} |
99 |
} |
96 |
|
100 |
|
97 |
template <typename _T1, typename _T2, typename _U1, typename _U2> |
101 |
template <typename _T1, typename _T2, typename _U1, typename _U2> |
98 |
constexpr bool _ImplicitlyConvertiblePair() |
102 |
constexpr bool _ImplicitlyConvertiblePair() |
99 |
{ |
103 |
{ |
100 |
return __and_<is_convertible<const _U1&, _T1>, |
104 |
return __and_<__or_<is_same<typename decay<_T1>::type, |
101 |
is_convertible<const _U2&, _T2>>::value; |
105 |
typename decay<_U1>::type>, |
|
|
106 |
is_convertible<const _U1&, _T1>>, |
107 |
__or_<is_same<typename decay<_T2>::type, |
108 |
typename decay<_U2>::type>, |
109 |
is_convertible<const _U2&, _T2>>>::value; |
102 |
} |
110 |
} |
103 |
|
111 |
|
104 |
template <typename _T1, typename _T2, typename _U1, typename _U2> |
112 |
template <typename _T1, typename _T2, typename _U1, typename _U2> |
105 |
constexpr bool _MoveConstructiblePair() |
113 |
constexpr bool _MoveConstructiblePair() |
106 |
{ |
114 |
{ |
107 |
return __and_<is_constructible<_T1, _U1&&>, |
115 |
return __and_<__or_<is_same<typename decay<_T1>::type, |
108 |
is_constructible<_T2, _U2&&>>::value; |
116 |
typename decay<_U1>::type>, |
|
|
117 |
is_constructible<_T1, _U1&&>>, |
118 |
__or_<is_same<typename decay<_T2>::type, |
119 |
typename decay<_U2>::type>, |
120 |
is_constructible<_T2, _U2&&>>>::value; |
109 |
} |
121 |
} |
110 |
|
122 |
|
111 |
template <typename _T1, typename _T2, typename _U1, typename _U2> |
123 |
template <typename _T1, typename _T2, typename _U1, typename _U2> |
112 |
constexpr bool _ImplicitlyMoveConvertiblePair() |
124 |
constexpr bool _ImplicitlyMoveConvertiblePair() |
113 |
{ |
125 |
{ |
114 |
return __and_<is_convertible<_U1&&, _T1>, |
126 |
return __and_<__or_<is_same<typename decay<_T1>::type, |
115 |
is_convertible<_U2&&, _T2>>::value; |
127 |
typename decay<_U1>::type>, |
|
|
128 |
is_convertible<_U1&&, _T1>>, |
129 |
__or_<is_same<typename decay<_T2>::type, |
130 |
typename decay<_U2>::type>, |
131 |
is_convertible<_U2&&, _T2>>>::value; |
116 |
} |
132 |
} |
117 |
|
133 |
|
118 |
|
134 |
|