forked from OctaForge/libostd
simplify range traits tests
This commit is contained in:
parent
8152173c39
commit
f578bd71f6
|
@ -71,11 +71,8 @@ namespace detail {
|
||||||
// is input range
|
// is input range
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename T, bool = IsConvertible<RangeCategory<T>, InputRangeTag>>
|
template<typename T> constexpr bool IsInputRangeCore
|
||||||
constexpr bool IsInputRangeCore = false;
|
= IsConvertible<RangeCategory<T>, InputRangeTag>;
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
constexpr bool IsInputRangeCore<T, true> = true;
|
|
||||||
|
|
||||||
template<typename T, bool = detail::IsRangeTest<T>::value>
|
template<typename T, bool = detail::IsRangeTest<T>::value>
|
||||||
constexpr bool IsInputRangeBase = false;
|
constexpr bool IsInputRangeBase = false;
|
||||||
|
@ -90,11 +87,8 @@ constexpr bool IsInputRange = detail::IsInputRangeBase<T>;
|
||||||
// is forward range
|
// is forward range
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename T, bool = IsConvertible<RangeCategory<T>, ForwardRangeTag>>
|
template<typename T> constexpr bool IsForwardRangeCore
|
||||||
constexpr bool IsForwardRangeCore = false;
|
= IsConvertible<RangeCategory<T>, ForwardRangeTag>;
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
constexpr bool IsForwardRangeCore<T, true> = true;
|
|
||||||
|
|
||||||
template<typename T, bool = detail::IsRangeTest<T>::value>
|
template<typename T, bool = detail::IsRangeTest<T>::value>
|
||||||
constexpr bool IsForwardRangeBase = false;
|
constexpr bool IsForwardRangeBase = false;
|
||||||
|
@ -109,12 +103,8 @@ constexpr bool IsForwardRange = detail::IsForwardRangeBase<T>;
|
||||||
// is bidirectional range
|
// is bidirectional range
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename T, bool = IsConvertible<
|
template<typename T> constexpr bool IsBidirectionalRangeCore
|
||||||
RangeCategory<T>, BidirectionalRangeTag
|
= IsConvertible<RangeCategory<T>, BidirectionalRangeTag>;
|
||||||
>> constexpr bool IsBidirectionalRangeCore = false;
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
constexpr bool IsBidirectionalRangeCore<T, true> = true;
|
|
||||||
|
|
||||||
template<typename T, bool = detail::IsRangeTest<T>::value>
|
template<typename T, bool = detail::IsRangeTest<T>::value>
|
||||||
constexpr bool IsBidirectionalRangeBase = false;
|
constexpr bool IsBidirectionalRangeBase = false;
|
||||||
|
@ -130,12 +120,8 @@ template<typename T> constexpr bool IsBidirectionalRange
|
||||||
// is random access range
|
// is random access range
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename T, bool = IsConvertible<
|
template<typename T> constexpr bool IsRandomAccessRangeCore
|
||||||
RangeCategory<T>, RandomAccessRangeTag
|
= IsConvertible<RangeCategory<T>, RandomAccessRangeTag>;
|
||||||
>> constexpr bool IsRandomAccessRangeCore = false;
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
constexpr bool IsRandomAccessRangeCore<T, true> = true;
|
|
||||||
|
|
||||||
template<typename T, bool = detail::IsRangeTest<T>::value>
|
template<typename T, bool = detail::IsRangeTest<T>::value>
|
||||||
constexpr bool IsRandomAccessRangeBase = false;
|
constexpr bool IsRandomAccessRangeBase = false;
|
||||||
|
@ -151,12 +137,8 @@ template<typename T> constexpr bool IsRandomAccessRange
|
||||||
// is finite random access range
|
// is finite random access range
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename T, bool = IsConvertible<
|
template<typename T> constexpr bool IsFiniteRandomAccessRangeCore
|
||||||
RangeCategory<T>, FiniteRandomAccessRangeTag
|
= IsConvertible<RangeCategory<T>, FiniteRandomAccessRangeTag>;
|
||||||
>> constexpr bool IsFiniteRandomAccessRangeCore = false;
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
constexpr bool IsFiniteRandomAccessRangeCore<T, true> = true;
|
|
||||||
|
|
||||||
template<typename T, bool = detail::IsRangeTest<T>::value>
|
template<typename T, bool = detail::IsRangeTest<T>::value>
|
||||||
constexpr bool IsFiniteRandomAccessRangeBase = false;
|
constexpr bool IsFiniteRandomAccessRangeBase = false;
|
||||||
|
@ -177,12 +159,8 @@ template<typename T> constexpr bool IsInfiniteRandomAccessRange
|
||||||
// is contiguous range
|
// is contiguous range
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
template<typename T, bool = IsConvertible<
|
template<typename T> constexpr bool IsContiguousRangeCore
|
||||||
RangeCategory<T>, ContiguousRangeTag
|
= IsConvertible<RangeCategory<T>, ContiguousRangeTag>;
|
||||||
>> constexpr bool IsContiguousRangeCore = false;
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
constexpr bool IsContiguousRangeCore<T, true> = true;
|
|
||||||
|
|
||||||
template<typename T, bool = detail::IsRangeTest<T>::value>
|
template<typename T, bool = detail::IsRangeTest<T>::value>
|
||||||
constexpr bool IsContiguousRangeBase = false;
|
constexpr bool IsContiguousRangeBase = false;
|
||||||
|
@ -206,16 +184,12 @@ namespace detail {
|
||||||
static constexpr bool value = (sizeof(test<T>(0)) == sizeof(char));
|
static constexpr bool value = (sizeof(test<T>(0)) == sizeof(char));
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T, bool = (IsConvertible<
|
template<typename T> constexpr bool IsOutputRangeCore
|
||||||
RangeCategory<T>, OutputRangeTag
|
= IsConvertible<RangeCategory<T>, OutputRangeTag> ||
|
||||||
> || (IsInputRange<T> &&
|
(IsInputRange<T> &&
|
||||||
(detail::OutputRangeTest<T, const RangeValue<T> &>::value ||
|
(detail::OutputRangeTest<T, const RangeValue<T> &>::value ||
|
||||||
detail::OutputRangeTest<T, RangeValue<T> &&>::value ||
|
detail::OutputRangeTest<T, RangeValue<T> &&>::value ||
|
||||||
detail::OutputRangeTest<T, RangeValue<T> >::value)
|
detail::OutputRangeTest<T, RangeValue<T> >::value));
|
||||||
))> constexpr bool IsOutputRangeCore = false;
|
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
constexpr bool IsOutputRangeCore<T, true> = true;
|
|
||||||
|
|
||||||
template<typename T, bool = detail::IsRangeTest<T>::value>
|
template<typename T, bool = detail::IsRangeTest<T>::value>
|
||||||
constexpr bool IsOutputRangeBase = false;
|
constexpr bool IsOutputRangeBase = false;
|
||||||
|
|
Loading…
Reference in a new issue