forked from OctaForge/libostd
remove some unnecessary code
This commit is contained in:
parent
f578bd71f6
commit
37059e505b
|
@ -53,10 +53,9 @@ namespace detail {
|
|||
"attempt to default construct a reference element in a tuple");
|
||||
}
|
||||
|
||||
template<typename T, typename = EnableIf<And<
|
||||
Not<IntegralConstant<bool, IsSame<Decay<T>, TupleLeaf>>>,
|
||||
IntegralConstant<bool, IsConstructible<H, T>>
|
||||
>::value>>
|
||||
template<typename T, typename = EnableIf<
|
||||
!IsSame<Decay<T>, TupleLeaf> && IsConstructible<H, T>
|
||||
>>
|
||||
explicit TupleLeaf(T &&t): p_value(forward<T>(t)) {
|
||||
static_assert(!IsReference<H> ||
|
||||
(IsLvalueReference<H> &&
|
||||
|
@ -136,12 +135,9 @@ namespace detail {
|
|||
template<typename A>
|
||||
TupleLeaf(IntegralConstant<int, 2>, const A &a): H(a) {}
|
||||
|
||||
template<typename T,
|
||||
typename = EnableIf<And<
|
||||
Not<IntegralConstant<bool, IsSame<Decay<T>, TupleLeaf>>>,
|
||||
IntegralConstant<bool, IsConstructible<H, T>>
|
||||
>::value>
|
||||
> explicit TupleLeaf(T &&t): H(forward<T>(t)) {}
|
||||
template<typename T, typename = EnableIf<
|
||||
!IsSame<Decay<T>, TupleLeaf> && IsConstructible<H, T>
|
||||
>> explicit TupleLeaf(T &&t): H(forward<T>(t)) {}
|
||||
|
||||
template<typename T, typename A>
|
||||
explicit TupleLeaf(IntegralConstant<int, 0>, const A &, T &&t):
|
||||
|
|
|
@ -64,50 +64,6 @@ using False = IntegralConstant<bool, false>;
|
|||
|
||||
template<typename T, T val> constexpr T IntegralConstant<T, val>::value;
|
||||
|
||||
/* and */
|
||||
|
||||
namespace detail {
|
||||
template<bool B, typename ...A> struct AndBase;
|
||||
|
||||
template<typename ...A>
|
||||
struct AndBase<false, A...>: False {};
|
||||
|
||||
template<>
|
||||
struct AndBase<true>: True {};
|
||||
|
||||
template<typename T>
|
||||
struct AndBase<true, T>: IntegralConstant<bool, T::Type::value> {};
|
||||
|
||||
template<typename T, typename ...A>
|
||||
struct AndBase<true, T, A...>: AndBase<T::Type::value, A...> {};
|
||||
}
|
||||
|
||||
template<typename T, typename ...A>
|
||||
struct And: detail::AndBase<T::Type::value, A...> {};
|
||||
|
||||
/* or */
|
||||
|
||||
namespace detail {
|
||||
template<bool B, typename ...A> struct OrBase;
|
||||
|
||||
template<>
|
||||
struct OrBase<false>: False {};
|
||||
|
||||
template<typename T, typename ...A>
|
||||
struct OrBase<false, T, A...>: OrBase<T::Type::value, A...> {};
|
||||
|
||||
template<typename ...A>
|
||||
struct OrBase<true, A...>: True {};
|
||||
}
|
||||
|
||||
template<typename T, typename ...A>
|
||||
struct Or: detail::OrBase<T::Type::value, A...> {};
|
||||
|
||||
/* not */
|
||||
|
||||
template<typename T>
|
||||
struct Not: IntegralConstant<bool, !T::Type::value> {};
|
||||
|
||||
/* type equality */
|
||||
|
||||
template<typename, typename> constexpr bool IsSame = false;
|
||||
|
|
Loading…
Reference in a new issue