inline constexpr bool is_signed_v = is_signed<_Tp>::value;
template <typename _Tp>
inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value;
+
template <typename _Tp, typename... _Args>
- inline constexpr bool is_constructible_v =
- is_constructible<_Tp, _Args...>::value;
+ inline constexpr bool is_constructible_v = __is_constructible(_Tp, _Args...);
template <typename _Tp>
- inline constexpr bool is_default_constructible_v =
- is_default_constructible<_Tp>::value;
+ inline constexpr bool is_default_constructible_v = __is_constructible(_Tp);
template <typename _Tp>
- inline constexpr bool is_copy_constructible_v =
- is_copy_constructible<_Tp>::value;
+ inline constexpr bool is_copy_constructible_v
+ = __is_constructible(_Tp, __add_lval_ref_t<const _Tp>);
template <typename _Tp>
- inline constexpr bool is_move_constructible_v =
- is_move_constructible<_Tp>::value;
+ inline constexpr bool is_move_constructible_v
+ = __is_constructible(_Tp, __add_rval_ref_t<_Tp>);
+
template <typename _Tp, typename _Up>
- inline constexpr bool is_assignable_v = is_assignable<_Tp, _Up>::value;
+ inline constexpr bool is_assignable_v = __is_assignable(_Tp, _Up);
template <typename _Tp>
- inline constexpr bool is_copy_assignable_v = is_copy_assignable<_Tp>::value;
+ inline constexpr bool is_copy_assignable_v
+ = __is_assignable(__add_lval_ref_t<_Tp>, __add_lval_ref_t<const _Tp>);
template <typename _Tp>
- inline constexpr bool is_move_assignable_v = is_move_assignable<_Tp>::value;
+ inline constexpr bool is_move_assignable_v
+ = __is_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>);
+
template <typename _Tp>
inline constexpr bool is_destructible_v = is_destructible<_Tp>::value;
+
template <typename _Tp, typename... _Args>
- inline constexpr bool is_trivially_constructible_v =
- is_trivially_constructible<_Tp, _Args...>::value;
+ inline constexpr bool is_trivially_constructible_v
+ = __is_trivially_constructible(_Tp, _Args...);
template <typename _Tp>
- inline constexpr bool is_trivially_default_constructible_v =
- is_trivially_default_constructible<_Tp>::value;
+ inline constexpr bool is_trivially_default_constructible_v
+ = __is_trivially_constructible(_Tp);
template <typename _Tp>
- inline constexpr bool is_trivially_copy_constructible_v =
- is_trivially_copy_constructible<_Tp>::value;
+ inline constexpr bool is_trivially_copy_constructible_v
+ = __is_trivially_constructible(_Tp, __add_lval_ref_t<const _Tp>);
template <typename _Tp>
- inline constexpr bool is_trivially_move_constructible_v =
- is_trivially_move_constructible<_Tp>::value;
+ inline constexpr bool is_trivially_move_constructible_v
+ = __is_trivially_constructible(_Tp, __add_rval_ref_t<_Tp>);
+
template <typename _Tp, typename _Up>
- inline constexpr bool is_trivially_assignable_v =
- is_trivially_assignable<_Tp, _Up>::value;
+ inline constexpr bool is_trivially_assignable_v
+ = __is_trivially_assignable(_Tp, _Up);
template <typename _Tp>
- inline constexpr bool is_trivially_copy_assignable_v =
- is_trivially_copy_assignable<_Tp>::value;
+ inline constexpr bool is_trivially_copy_assignable_v
+ = __is_trivially_assignable(__add_lval_ref_t<_Tp>,
+ __add_lval_ref_t<const _Tp>);
template <typename _Tp>
- inline constexpr bool is_trivially_move_assignable_v =
- is_trivially_move_assignable<_Tp>::value;
+ inline constexpr bool is_trivially_move_assignable_v
+ = __is_trivially_assignable(__add_lval_ref_t<_Tp>,
+ __add_rval_ref_t<_Tp>);
template <typename _Tp>
inline constexpr bool is_trivially_destructible_v =
is_trivially_destructible<_Tp>::value;
template <typename _Tp, typename... _Args>
- inline constexpr bool is_nothrow_constructible_v =
- is_nothrow_constructible<_Tp, _Args...>::value;
+ inline constexpr bool is_nothrow_constructible_v
+ = __is_nothrow_constructible(_Tp, _Args...);
template <typename _Tp>
- inline constexpr bool is_nothrow_default_constructible_v =
- is_nothrow_default_constructible<_Tp>::value;
+ inline constexpr bool is_nothrow_default_constructible_v
+ = __is_nothrow_constructible(_Tp);
template <typename _Tp>
- inline constexpr bool is_nothrow_copy_constructible_v =
- is_nothrow_copy_constructible<_Tp>::value;
+ inline constexpr bool is_nothrow_copy_constructible_v
+ = __is_nothrow_constructible(_Tp, __add_lval_ref_t<const _Tp>);
template <typename _Tp>
- inline constexpr bool is_nothrow_move_constructible_v =
- is_nothrow_move_constructible<_Tp>::value;
+ inline constexpr bool is_nothrow_move_constructible_v
+ = __is_nothrow_constructible(_Tp, __add_rval_ref_t<_Tp>);
+
template <typename _Tp, typename _Up>
- inline constexpr bool is_nothrow_assignable_v =
- is_nothrow_assignable<_Tp, _Up>::value;
+ inline constexpr bool is_nothrow_assignable_v
+ = __is_nothrow_assignable(_Tp, _Up);
template <typename _Tp>
- inline constexpr bool is_nothrow_copy_assignable_v =
- is_nothrow_copy_assignable<_Tp>::value;
+ inline constexpr bool is_nothrow_copy_assignable_v
+ = __is_nothrow_assignable(__add_lval_ref_t<_Tp>,
+ __add_lval_ref_t<const _Tp>);
template <typename _Tp>
- inline constexpr bool is_nothrow_move_assignable_v =
- is_nothrow_move_assignable<_Tp>::value;
+ inline constexpr bool is_nothrow_move_assignable_v
+ = __is_nothrow_assignable(__add_lval_ref_t<_Tp>, __add_rval_ref_t<_Tp>);
+
template <typename _Tp>
inline constexpr bool is_nothrow_destructible_v =
is_nothrow_destructible<_Tp>::value;