remove some unnecessary code

master
Daniel Kolesa 2016-01-14 19:32:22 +00:00
parent f578bd71f6
commit 37059e505b
2 changed files with 6 additions and 54 deletions

View File

@ -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):

View File

@ -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;