From 1710c484b3a51700ed4678f6034b6cd7a8140882 Mon Sep 17 00:00:00 2001
From: Dave Abrahams
+Date:
-2003-08-05 2003-09-14
@@ -143,7 +143,7 @@ object copy constructed from x
Copyright:
Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
if (Value == use_default) value_type = iterator_traits<Base>::value_type; @@ -994,12 +1186,17 @@ if (Category == use_default) access_category< Base >, traversal_category< Base > > -else if (Category is an access tag) +else if (Category is convertible to a standard access tag) iterator_category = iterator_tag< Category - ... + else if (Category has a nested traversal type) + if (reference is not a reference-to-const) + Category::access + else + if (Category + -else if (Category is a traversal tag) +else if (Category is convertable to a standard traversal tag) ... else iterator_category = Category; @@ -1369,7 +1566,7 @@ then returns the result.Class template transform_iterator
-template <class AdaptableUnaryFunction, +template <class UnaryFunction, class Iterator, class Reference = use_default, class Value = use_default> @@ -1379,45 +1576,44 @@ class transform_iterator friend class iterator_core_access; public: transform_iterator(); - transform_iterator(Iterator const& x, AdaptableUnaryFunction f); + transform_iterator(Iterator const& x, UnaryFunction f); template<class OtherIterator, class R2, class V2> transform_iterator( - transform_iterator<AdaptableUnaryFunction, OtherIterator, R2, V2> const& t + transform_iterator<UnaryFunction, OtherIterator, R2, V2> const& t , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition ); - AdaptableUnaryFunction functor() const; + UnaryFunction functor() const; private: typename transform_iterator::value_type dereference() const; - AdaptableUnaryFunction m_f; + UnaryFunction m_f; };transform_iterator requirements
-The type AdaptableUnaryFunction must be Assignable, Copy -Constructible, and the expression f(x) must be valid where f -is an object of type AdaptableUnaryFunction, x is an object of -type AdaptableUnaryFunction::argument_type, and where the type of -f(x) must be AdaptableUnaryFunction::result_type.
+The type UnaryFunction must be Assignable, Copy Constructible, and +the expression f(*i) must be valid where f is an object of +type UnaryFunction, i is an object of type Iterator, and +where the type of f(*i) must be +result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type.
The type Iterator must at least model Readable Iterator. The resulting transform_iterator models the most refined of the following options that is also modeled by Iterator.
-
- Writable Lvalue Iterator if the result_type of the -AdaptableUnaryFunction is a non-const reference.
-- Readable Lvalue Iterator if the result_type is a const +
- Writable Lvalue Iterator if result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type is a non-const reference.
+- Readable Lvalue Iterator if result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type is a const reference.
- Readable Iterator otherwise.
The transform_iterator models the most refined standard traversal concept that is modeled by Iterator.
-The value_type of transform_iterator is -remove_reference<result_type>::type. The reference type is -result_type.
+The reference type of transform_iterator is +result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type. +The value_type is remove_cv<remove_reference<reference> >::type.
transform_iterator public operations
@@ -1431,7 +1627,7 @@ and m_iterator default constru
transform_iterator(Iterator const& x, AdaptableUnaryFunction f);
+transform_iterator(Iterator const& x, UnaryFunction f);
AdaptableUnaryFunction functor() const;
+UnaryFunction functor() const;