bsl::Vector_DeduceIteratorCategory

This struct provides a primitive means to distinguish between iterator types and fundamental types, in order to dispatch to the correct implementation of a function template (or constructor template) passed two arguments of identical type. By default, it is assumed that any type that is not a fundamental type, as determined by the type trait bsl::is_fundamental, must be an iterator type. std::iterator_traits is updated in C++17 to provide a SFINAE-friendly instantiation of the primary-template for types that do not provide all of the nested typedef names, but we cannot portably rely on such a scheme yet.

Synopsis

Declared in <bslstl_vector.h>

template<
    class BSLSTL_ITERATOR,
    bool BSLSTL_NOTSPECIALIZED = is_fundamental<BSLSTL_ITERATOR>::value>
struct Vector_DeduceIteratorCategory;

Type Aliases

NameDescription
type The deduced iterator category of BSLSTL_ITERATOR, or Nil for fundamental types.

Specializations

NameDescription
Vector_DeduceIteratorCategory<BSLSTL_ITERATOR, true> This partial specialization of the struct template for fundamental types provides a nested type that is not an iterator category, so can be used to control the internal dispatch of function template overloads taking two arguments of the same type.