Boost logo

Boost Users :

Subject: Re: [Boost-users] [context] boost::coroutines::asymmetric_coroutine<T>::pull_type iterator does not properly model InputIterator
From: Mueller-Roemer, Johannes Sebastian (Johannes.Sebastian.Mueller-Roemer_at_[hidden])
Date: 2015-02-16 09:12:58


Alternatively, if you do not wish to support InputIterator semantics, it might be better to remove operator++(int) or have it return void instead of a conceptually invalid iterator.

--
Johannes S. Mueller-Roemer, MSc
Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)

Fraunhofer-Institut für Graphische Datenverarbeitung IGD
Fraunhoferstr. 5 | 64283 Darmstadt | Germany
Tel +49 6151 155-606 | Fax +49 6151 155-139
johannes.mueller-roemer_at_[hidden] | www.igd.fraunhofer.de

From: Mueller-Roemer, Johannes Sebastian
Sent: Monday, February 16, 2015 15:00
To: boost-users_at_[hidden]
Subject: RE: [Boost-users] [context] boost::coroutines::asymmetric_coroutine<T>::pull_type iterator does not properly model InputIterator

If that is „as expected“ it still violates the requirements for an InputIterator. See the last row in Table 107 in 24.2.3 in the standard http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
As-is the current “iterator” is not a valid iterator of any kind as InputIterator is already the weakest requirement.

Example of how it should work (using an istream_iterator, which is an InputIterator):
#include <iostream>
#include <sstream>
#include <iterator>

auto main(int, char **) -> int
{
      std::istringstream str("Hello , World !");
      for(auto it = std::istream_iterator<std::string>(str); it != std::istream_iterator<std::string>();)
            std::cout << *it++;
      std::cout << "\n";
}

Which outputs (as expected):
Hello,World!

The issue can be solved by storing a value in the iterator or returning a proxy object which dereferences to the original value.
--
Johannes S. Mueller-Roemer, MSc
Wiss. Mitarbeiter - Interactive Engineering Technologies (IET)

Fraunhofer-Institut für Graphische Datenverarbeitung IGD
Fraunhoferstr. 5 | 64283 Darmstadt | Germany
Tel +49 6151 155-606 | Fax +49 6151 155-139
johannes.mueller-roemer_at_[hidden]<mailto:johannes.mueller-roemer_at_[hidden]> | www.igd.fraunhofer.de<http://www.igd.fraunhofer.de>

From: Boost-users [mailto:boost-users-bounces_at_[hidden]] On Behalf Of Oliver Kowalke
Sent: Monday, February 16, 2015 14:20
To: boost-users_at_[hidden]<mailto:boost-users_at_[hidden]>
Subject: Re: [Boost-users] [context] boost::coroutines::asymmetric_coroutine<T>::pull_type iterator does not properly model InputIterator

2015-02-16 13:46 GMT+01:00 Mueller-Roemer, Johannes Sebastian <Johannes.Sebastian.Mueller-Roemer_at_[hidden]<mailto:Johannes.Sebastian.Mueller-Roemer_at_[hidden]>>:
Compiling is not the issue.

it works as expected

Furthermore your example does not test the issue I mentioned, as it does not use *it++;

operator++ has higher precedence than operator* -> each increment triggers an jump/switch operation -> last increment invalidates coroutine



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net