
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<is_iterator<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-... Sent from the Boost - Dev mailing list archive at Nabble.com.