From 1e3da4b77f527437b018262616dadb0e2ebf6390 Mon Sep 17 00:00:00 2001
From: Dave Abrahams
If CategoryOrTraversal is use_default then -iterator_traversal<Derived>::type is convertible to the most -derived standard traversal tag type to which -iterator_traversal<Iterator>::type is also convertible, and not to -any more-derived traversal tag type. Otherwise -iterator_traversal<Derived>::type is convertible to the most -derived standard traversal tag type to which CategoryOrTraversal -is also convertible, and not to any more-derived traversal tag type.
The enable_if_interoperable template used above is for exposition purposes. The member operators should be only be in an overload set provided the derived types Dr1 and Dr2 are interoperable, @@ -1173,7 +1165,7 @@ class iterator_adaptor public: iterator_adaptor(); explicit iterator_adaptor(Base iter); - Base base() const; + Base const base() const; protected: Base const& base_reference() const; Base& base_reference(); @@ -1270,7 +1262,7 @@ expression involving Derived i -
Base base() const;
+Base const base() const;
[Note: specifying Base const gives implementations license to +return Base const& for efficiency's sake. If base() +returned just Base, it would be possible to call non-const +member functions on the result object directly]
Base base() const;
+Base const base() const;
[Note: specifying Base const gives implementations license to +return Base const& for efficiency's sake. If base() +returned just Base, it would be possible to call non-const +member functions on the result object directly]