Subject: Re: [boost] Range Adapters (map_keys, map_values) cause undefined behavior (segv, etc) when applied to R-Values, especially in the context of BOOST_FOREACH
From: Nathan Ridge (zeratul976_at_[hidden])
Date: 2014-01-29 20:41:00


Hi Igor, This is a known issue: see https://svn.boost.org/trac/boost/ticket/7630. (That bug talks about C++11 range-based for loops, but the issue with BOOST_FOREACH is the same). I'm not sure what the status of this bug is. Jeffrey Yasskin posted a patch to that bug which I reviewed over email, but I haven't heard from him about it since. Note that if you use C++11, a workaround is to use boost::for_each with a lambda instead, so   BOOST_FOREACH(SomeType v, range_rvalue | adaptor)   {       statements   } turns into     boost::for_each(range_rvalue | adaptor, [&](SomeType v)   {       statements   }); Since the temporary lives until the end of the statement, and the whole loop is contained within the statement, there is no more undefined behaviour. Regards, Nate