Boost logo

Boost Users :

Subject: Re: [Boost-users] [context] boost::coroutines::asymmetric_coroutine<T>::pull_type iterator does not properly model InputIterator
From: Oliver Kowalke (oliver.kowalke_at_[hidden])
Date: 2015-02-16 09:28:04


coroutines behave different than ordinary containers - even a temp var,
created inside iterator::operator++( int), will influence the state of the
attached coroutine (increment operator)
you can't count on the feature set described for input iterators in the
standard

2015-02-16 15:00 GMT+01:00 Mueller-Roemer, Johannes Sebastian <
Johannes.Sebastian.Mueller-Roemer_at_[hidden]>:

> 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] | 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]
> *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]>:
>
> 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 mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



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