Subject: [Boost-bugs] [Boost C++ Libraries] #1020: Boost.Iterator proposal to add is_constant_iterator
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2007-05-31 18:49:36
#1020: Boost.Iterator proposal to add is_constant_iterator
-----------------------------+----------------------------------------------
Reporter: andysem_at_[hidden] | Type: Patches
Status: new | Milestone: Boost 1.35.0
Component: iterator | Version:
Severity: Not Applicable | Keywords: is_constant_iterator
-----------------------------+----------------------------------------------
I propose to add a new trait to the Boost.Iterator library:
`is_constant_iterator`. The trait is applied to an iterator and returns
true if the iterator's reference type is a constant reference and false if
the type is a non-constant reference. The trait will fail to compile when
applied to iterators having non-reference reference types.
This addition would make it easier to use library components like
`iterator_facade` and `iterator_adaptor` for implementing container
iterator wrappers like this:
{{{
template< NodeItT >
struct MyIterator :
public iterator_facade<
MyIterator< NodeItT >,
typename mpl::if_<
is_constant_iterator< NodeItT >,
const value_type,
value_type
>::type,
typename iterator_category< NodeItT >::type
>
{
};
}}}
Here `NodeItT` is a wrapped iterator and may be a `const_iterator` or
`iterator` of a container.
Another use case is when a user wants to detect whether an iterator is
`const_iterator` or `iterator`. An example of this: implementing
functionality of iterator translation similar to Boost.MultiIndex
`project` method.
I've attached an archive with the implementation, tests and patches to
documentation. The implementation, in addition to the abovementioned
functionality, supports `std::vector< bool >` iterators, though their
reference types are not references.
--
Ticket URL: <http://svn.boost.org/trac/boost/ticket/1020>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:49:55 UTC