types/traits: check for begin/end in is_container_v
This commit is contained in:
parent
5144dd137a
commit
15de10c19d
@ -294,9 +294,18 @@ using nth_argument_t = typename nth_argument<N, FuncT>::type;
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
/// A trait that tests if a type `T` is a container type.
|
||||||
|
///
|
||||||
|
/// That is, a type that has:
|
||||||
|
/// * container typedefs such as value_type, reference, iterator, etc.
|
||||||
|
/// * viable std::begin/std::end overloads
|
||||||
|
///
|
||||||
|
/// Defaults to false.
|
||||||
template <typename T, typename = std::void_t<>>
|
template <typename T, typename = std::void_t<>>
|
||||||
struct is_container : public std::false_type {};
|
struct is_container : public std::false_type {};
|
||||||
|
|
||||||
|
|
||||||
|
///----------------------------------------------------------------------------
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct is_container<
|
struct is_container<
|
||||||
T,
|
T,
|
||||||
@ -307,15 +316,14 @@ struct is_container<
|
|||||||
typename T::iterator,
|
typename T::iterator,
|
||||||
typename T::const_iterator,
|
typename T::const_iterator,
|
||||||
typename T::difference_type,
|
typename T::difference_type,
|
||||||
typename T::size_type
|
typename T::size_type,
|
||||||
|
decltype(std::end (std::declval<T> ())),
|
||||||
|
decltype(std::begin (std::declval<T> ()))
|
||||||
>
|
>
|
||||||
> : public std::true_type {};
|
> : public std::true_type {};
|
||||||
|
|
||||||
|
|
||||||
template <size_t N, typename ValueT>
|
//-----------------------------------------------------------------------------
|
||||||
struct is_container<std::array<ValueT,N>> : public std::true_type {};
|
|
||||||
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
constexpr auto is_container_v = is_container<T>::value;
|
constexpr auto is_container_v = is_container<T>::value;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user