2014-07-04 22:27 GMT+08:00 Nat Goodspeed <nat@lindenlab.com>:
On Fri, Jul 4, 2014 at 2:28 AM, Mueller-Roemer, Johannes Sebastian
<Johannes.Sebastian.Mueller-Roemer@igd.fraunhofer.de> wrote:

> Sorry for the misunderstanding, the part in the parentheses was meant to point out that I currently do not require bidirectional data flow, so I don't have a use case for that ;)

I do understand that. My question was directed more to the mailing
list in general. I'm content with unidrectional coroutine data flow
until someone surfaces a compelling use case for bidirectional.

> The auto& is not the issue and works just fine in the BOOST_COROUTINES_V1 case (and if it were, it would be a compiler bug as auto& must match std::string const &).

Could it be a compiler bug anyway? The following works fine with gcc 4.2:

#include <boost/coroutine/all.hpp>
#include <iostream>

void coro_fn(boost::coroutines::coroutine<const std::string&>::push_type& sink)
{
    sink("Hello world!\n");
}

int main(int argc, char *argv[])
{
    boost::coroutines::coroutine<const std::string&>::pull_type coro(coro_fn);
    std::cout << coro.get() << std::endl;
    return 0;
}

Call coro() and you'll see the error.
Seems that the specializations of pull_coroutine_base and pull_coroutine_object for R& is unnecessary and erroneous.