[#bsl-Vector_DeduceIteratorCategory-0d] = xref:bsl.adoc[bsl]::Vector_DeduceIteratorCategory :relfileprefix: ../ :mrdocs: 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>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- template< class BSLSTL_ITERATOR, bool BSLSTL_NOTSPECIALIZED = is_fundamental<BSLSTL_ITERATOR>::value> struct Vector_DeduceIteratorCategory; ---- == Type Aliases [cols="1,4"] |=== | Name| Description | xref:bsl/Vector_DeduceIteratorCategory-0d/type.adoc[`type`] | The deduced iterator category of `BSLSTL_ITERATOR`, or `Nil` for fundamental types. |=== == Specializations [cols="1,4"] |=== | Name| Description | xref:bsl/Vector_DeduceIteratorCategory-0f.adoc[`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. |=== [.small]#Created with https://www.mrdocs.com[MrDocs]#