Boost logo

Boost :

Subject: Re: [boost] [type_traits] Interest in is_iterator type trait?
From: pfultz2 (pfultz2_at_[hidden])
Date: 2014-08-19 13:09:16


> Fwiw, I used something closely related in libc++ for SFINAE on the “member
> template members” of the containers (the ones taking iterators) to
> disambiguate them from the members/constructors not taking iterators, but
> having the same number of parameters. But instead of is_iterator, I
> needed
> is_input_iterator, is_forward_iterator, etc. These refinements are
> implemented similar to what Beman shows, but takes into account which std
> iterator tag the nested iterator_category type is implicitly convertible
> to.

I actually have used a `has_iterator_traversal` trait to check iterator
traversal, like this:

    template<class T, class Traversal, class Enable = void>
    struct has_iterator_traversal
    : boost::mpl::bool_<false>
    {};

    template<class T, class Traversal>
    struct has_iterator_traversal<T, Traversal, typename
boost::enable_if&lt;is_iterator&lt;T> >::type>
    : boost::is_convertible<typename boost::iterator_traversal<T>::type,
Traversal>::type
    {};

It just builds on top of the `is_iterator` trait. It uses the traversal
rather
than the iterator categories, since they are broken.

Paul Fultz II

--
View this message in context: http://boost.2283326.n4.nabble.com/type-traits-Interest-in-is-iterator-type-trait-tp4666578p4666600.html
Sent from the Boost - Dev mailing list archive at Nabble.com.

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk