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

Name

Description

type

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

Specializations

Name

Description

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.

Created with MrDocs