$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Fredrik Blomqvist (fredrik_blomqvist_at_[hidden])
Date: 2004-09-16 11:53:32
Hi
Consider this example of mem_fn usage:
struct X { int bar; };
std::vector<X> vec;
....
boost::make_transform_iterator(vec.begin(), boost::mem_fn(&X::bar));
The above is, strictly speaking, _not_ a Random Access Traversal Iterator,
or even a Forward Traversal Iterator, and would fail in otherwise concept
conforming code (or in a potential concept-check).
The problems lies in the function objects returned by boost::mem_fn and
boost::bind not being default constructible, thus making the resulting
iterator not default constructible which is required by the Forward
Traversal concept.
http://boost.org/libs/iterator/doc/new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators
(The problem is even more pronounced if using the "old" Iterator Concepts.)
I found an old (2002) mail by David Abrahams where he also noted the
problem: http://listarchives.boost.org/MailArchives/boost/msg30420.php
But it didn't seem to have resulted in any change of the codebase.
I think use-cases similar to the one above are good motivation and hope this
could be considered an acceptable improvement.
Regards
// Fredrik Blomqvist
P.S. I realize it is very close to the branch for release and don't expect
this to be added before that.