
Szymon Gatner wrote:
this happens because as suggested in boost.foreach docs I have this earlier:
#define foreach BOOST_FOREACH
which (if I understand correctly) causes offending line to expand into:
boost::BOOST_FOREACH::tag
Is there anything easy I could do to fix this?
Your problem depends on the ordering of header files and the macro definition: // OK #define foreach BOOST_FOREACH #include <boost/foreach.hpp> #include <boost/multi_index/hashed_index.hpp> // OK #include <boost/foreach.hpp> #include <boost/multi_index/hashed_index.hpp> #define foreach BOOST_FOREACH // Error #include <boost/foreach.hpp> #define foreach BOOST_FOREACH #include <boost/multi_index/hashed_index.hpp> If you can control the ordering, you can avoid the problem. But this solution is error prone. Fortunately, is_noncopyable and is_lightweight_proxy customization points seem to be only used in Boost.MultiIndex. So, I think, changing the name of namespace foreach is a viable solution. (Please note that this solution can break existing codes using is_noncopyable and is_lightweight_proxy customization points.) 1. Change namespace foreach --> namespace foreach_ foreach:: --> foreach_:: in boost/foreach.hpp and boost/foreach_fwd.hpp. 2. Change foreach:: --> foreach_:: in boost/multi_index/hashed_index.hpp boost/multi_index/ordered_index.hpp boost/multi_index/random_access_index.hpp boost/multi_index/sequenced_index.hpp (and, if you want, libs/foreach/test/noncopyable.cpp). Regards, Michel