[#bsl-Vector_DeduceIteratorCategory-0d]
= xref:bsl.adoc[bsl]::Vector&lowbar;DeduceIteratorCategory
:relfileprefix: ../
:mrdocs:

Metafunction distinguishing iterators from fundamental types&period;

== Synopsis

Declared in `&lt;bslstl&lowbar;vector&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;
    class BSLSTL&lowbar;ITERATOR,
    bool BSLSTL&lowbar;NOTSPECIALIZED = is&lowbar;fundamental&lt;BSLSTL&lowbar;ITERATOR&gt;&colon;&colon;value&gt;
struct Vector&lowbar;DeduceIteratorCategory;
----

== Description

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&period; By default, it is assumed that any type that is not a fundamental type, as determined by the type trait `bsl&colon;&colon;is&lowbar;fundamental`, must be an iterator type&period; `std&colon;&colon;iterator&lowbar;traits` is updated in C&plus;&plus;17 to provide a SFINAE&hyphen;friendly instantiation of the primary&hyphen;template for types that do not provide all of the nested typedef names, but we cannot portably rely on such a scheme yet&period;

== Type Aliases

[cols="1,4"]
|===
| Name| Description
| xref:bsl/Vector_DeduceIteratorCategory-0d/type.adoc[`type`] 
| The deduced iterator category of `BSLSTL&lowbar;ITERATOR`, or `Nil` for fundamental types&period;
|===


== Specializations

[cols="1,4"]
|===
| Name| Description
| xref:bsl/Vector_DeduceIteratorCategory-0f.adoc[`Vector&lowbar;DeduceIteratorCategory&lt;BSLSTL&lowbar;ITERATOR, true&gt;`] 
| Specialization of `Vector&lowbar;DeduceIteratorCategory` for fundamental types&period;
|===



[.small]#Created with https://www.mrdocs.com[MrDocs]#
