Hi,

 

aside from the fact that the new coroutines are – apparently intentionally – only unidirectional now (currently not much of an issue for me), I noticed that it is apparently no longer possible to yield values by reference as shown in the following example:

 

#include <fstream>

#include <string>

#include <iostream>

#include <boost/coroutine/all.hpp>

 

using type = std::string;

auto lines_from_file(char const * fname) -> boost::coroutines::coroutine<type>::pull_type

{

                using namespace boost::coroutines;

                return coroutine<type>::pull_type{

                               [fname](coroutine<type>::push_type& yield)

                               {

                                               std::string line;

                                               std::ifstream stream(fname);

                                               while(stream)

                                                               std::getline(stream, line), yield(line);

                               },

                               attributes(fpu_not_preserved)

                };

}

 

int main(int, char**)

{

                auto lines = lines_from_file("test.txt");

                unsigned count = 0;

                for(auto& line : lines)

                               std::cout << std::setw(4) << ++count << ": " << line << "\n";

}

 

If one changes type to std::string const & the example no longer compiles. If I use the old BOOST_COROUTINES_V1 API boost::coroutines::coroutine<std::string const &()> works just fine. Is this limitation also intentional (why?) or is this an unintentional regression?

 

Regards

Johannes S. Mueller-Roemer

 

--

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@igd.fraunhofer.de  |  www.igd.fraunhofer.de