meta: FIX sfinae idiom in use_* aliases
This commit is contained in:
parent
d127713711
commit
7e25067468
@ -53,10 +53,6 @@ namespace utl {
|
||||
template<typename _Tp> // Partial specialization for false.
|
||||
struct if_ <false, _Tp> { };
|
||||
|
||||
//! Alias template for if_
|
||||
template<bool _C, typename _Tp = void>
|
||||
using if_t = typename if_<_C, _Tp>::type;
|
||||
//! @}
|
||||
}
|
||||
|
||||
//! @}
|
||||
|
@ -54,71 +54,34 @@ namespace utl {
|
||||
using void_t = typename void_t_impl<_Ts...>::type;
|
||||
//! @}
|
||||
|
||||
//! Alias template for if_
|
||||
template<bool _C, typename _Tp = void>
|
||||
using if_t = typename if_<_C, _Tp>::type;
|
||||
|
||||
//! If same type resolves to _Ret, else SFINAE
|
||||
//! @{
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
struct use_if_same_ {
|
||||
using type = if_t <
|
||||
same_<_T1, _T2>::value,
|
||||
_Ret
|
||||
>;
|
||||
};
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
using use_if_same_t = typename use_if_same_<_T1, _T2, _Ret>::type;
|
||||
//! @}
|
||||
|
||||
|
||||
//! If not same type resolves to _Ret, else SFINAE
|
||||
//! @{
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
struct use_if_not_same_ {
|
||||
using type = if_t <
|
||||
!same_<_T1, _T2>::value,
|
||||
_Ret
|
||||
>;
|
||||
};
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
using use_if_not_same_t = typename use_if_not_same_<_T1, _T2, _Ret>::type;
|
||||
//! @}
|
||||
|
||||
|
||||
//! If any type (_T1 or _T2) type resolves to _Ret, else to SFINAE
|
||||
//! @{
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
struct use_if_any_ {
|
||||
using type = if_t <
|
||||
or_<_T1, _T2>::value,
|
||||
_Ret
|
||||
>;
|
||||
};
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
using use_if_any_t = typename use_if_any_<_T1, _T2, _Ret>::type;
|
||||
//! @}
|
||||
|
||||
|
||||
//! If both type (_T1 and _T2) type resolves to _Ret, else to SFINAE
|
||||
//! @{
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
struct use_if_both_ {
|
||||
using type = if_t <
|
||||
and_<_T1, _T2>::value,
|
||||
_Ret
|
||||
>;
|
||||
};
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
using use_if_both_t = typename use_if_both_<_T1, _T2, _Ret>::type;
|
||||
//! @}
|
||||
|
||||
//! Publicly recognized alias template for if_t
|
||||
//! Publicly recognized alias template for if_
|
||||
template<bool _C, typename _Tp = void>
|
||||
using enable_if_t = typename if_<_C, _Tp>::type;
|
||||
|
||||
//! Uniform use_ style alias template for if_t
|
||||
//!@{
|
||||
//! Uniform alias template for if_
|
||||
template<bool _C, typename _Tp = void>
|
||||
using use_if_t = typename if_<_C, _Tp>::type;
|
||||
//!@{
|
||||
|
||||
//! If same type resolves to _Ret, else SFINAE
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
using use_if_same_t = typename if_<same_<_T1, _T2>::value, _Ret>::type;
|
||||
|
||||
//! If not same type resolves to _Ret, else SFINAE
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
using use_if_not_same_t = typename if_<!same_<_T1, _T2>::value, _Ret>::type;
|
||||
|
||||
//! If any type (_T1 or _T2) type resolves to _Ret, else to SFINAE
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
using use_if_any_t = typename if_<or_<_T1, _T2>::value, _Ret>::type;
|
||||
|
||||
//! If both type (_T1 and _T2) type resolves to _Ret, else to SFINAE
|
||||
template <typename _T1, typename _T2, typename _Ret =_T1>
|
||||
using use_if_both_t = typename if_<and_<_T1, _T2>::value, _Ret>::type;
|
||||
|
||||
}
|
||||
|
||||
//! @}
|
||||
|
Loading…
x
Reference in New Issue
Block a user