Annex D (informative) Compatibility [diff]

D.1 C++ and Ranges [diff.cpp]

D.1.5 iterator_traits cannot be specialized [diff.cpp.iteratortraits]

In this STL design, iterator_traits changes from being a class template to being an alias template. This is to intentionally break any code that tries to specialize it. In its place are the three class templates difference_type, value_type, and iterator_category. The need for this traits balkanization is because the associated types belong to separate concepts: difference_type belongs to WeaklyIncrementable; value_type belongs to Readable; and iterator_category belongs to InputIterator.

This breakage is intentional and inherent in the decomposition of the iterator concepts established by the Palo Alto report (palo-alto).