On 7/31/2011 11:04 AM, Joaquin M Lopez Munoz wrote:
Hi,
According to the discussion at
http://lists.boost.org/boost-users/2011/07/69718.php
seems like for some non-copyable sequence types, such as indices of Boost.MultiIndex, Boost.Foreach has stopped in GCC 4.6.1 with Boost 1.47 (and did not work in clang++ 2.9 either for Boost 1.46 or Boost 1.47.)
Before I apply the boost::foreach::is_noncopyable hack, can the author take a look at this? Release notes for Boost 1.47 indicate that const rvalue detection has been modified in Boost.Foreach, so I wonder whether this situation is something that should be fixed in Boost.Foreach rather than user code.
Michel Morin explains the situation here: https://groups.google.com/forum/#!msg/boost-list/D_sArzFkXEQ/CI07X_6bEqEJ Compile-time const rvalue detection in Foreach in the absence of C++0x rvalue references relies on compiler bugs. Gcc 4.6 fixes the bug. So either you compile with -std=gnu++0x and get rvalue references, or else you fall back on runtime const rvalue detection. In the latter case, you have to worry about the is_noncopyable business. So, you should specialize boost::foreach::is_noncopyable as Michel suggests. Another option would be to make your type non-copyable by inheriting from boost::noncopyable. Boost.Foreach is savvy to that. HTH, -- Eric Niebler BoostPro Computing http://www.boostpro.com