
Ivan Le Lann wrote:
IIUC, the line below is broken: auto const & broken_range = std::string("Hello, world!") | reversed;
Right.
So it seems you're proposing to adapt BOOST_FOREACH to solve a problem in adaptors. How do you intend to fix C++11 builtin foreach?
I don't intend to fix C++11 range-based for. To fix this, we need to modify the Range library. I saw a few approaches to solve the dangling reference problem in the foreach statement. One approach is, the same as yours, that range adaptors have a copy (resource) if necessary. Now that we have rvalue references and move semantics, this approach seems realizable. Another approach, which is currently available, is to use `oven::shared`: BOOST_FOREACH( char ch , pstade::oven::shared(new std::string("Hello, world!")) | reversed) { ... } See http://p-stade.sourceforge.net/oven/doc/html/oven/ranges.html#oven.ranges.sh...
In C++11, I think this could be fixed with rvalue refs detection. Shouldn't any function relying on the fact that its arguments still exist after the call do that check?
So either delete the &&-function or ... [disclaimer: ugly but funny] make it move the range inside the adaptor somehow.
Regards, Michel