Subject: Re: [Boost-bugs] [Boost C++ Libraries] #5463: default constructor of filter_iterator does not initialize members
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2011-04-13 03:49:00
#5463: default constructor of filter_iterator does not initialize members
---------------------------------------------+------------------------------
Reporter: aleksander.sulkowski@⦠| Owner: dave
Type: Bugs | Status: closed
Milestone: To Be Determined | Component: iterator
Version: Boost 1.47.0 | Severity: Problem
Resolution: invalid | Keywords: filter_iterator default constructor
---------------------------------------------+------------------------------
Comment (by anonymous):
There is one more additional use of singular iterators - like in case of
istream_iterator. They can be compared with an other iterator to check
agains end condition. It may be far more useful then calling "end" method
from the iterator class. Please read my example below.
I do not agree with the efficiency argument, as only if the iterator
encapsulated by filter_iterator is a class, it's constructor is called
anyway. I do not think simple types initialization cost justifies leaving
it uninitialized.
It would help in my particular case. I have an iterator encapsulating a
filter_iterator on top of a predicate and an array. I relay on the fact
the instances of my iterator default constructed are equal. I pass to
boost::minmax 2 arguments:
* a non-default constructed instance of my iterator, initialized with the
filter iterator initialized with an array.
* a default constructed iterator, what encapsulates default constructed
filter iterator which indicates the end (like in istream_iterator)
I check result of minmax, that returns a pair of iterators having my type.
In order to check if they are end iterators, I compare each with default
constructed iterator. ''I do not have access to "internal",
filter_iterator anymore, but I can construct a new "end iterator" and
compare.''
It will work, only if encapsulated filter iterators, default initialized,
will be equal to the "end" iterator I passed to boost::minmax. In order to
achieve that filter iterators have to be equal, so the iterator they
encapsulate have to be initialized (to be equal). And they are for any
other than simple type case.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/5463#comment:4> 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:50:06 UTC