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
#include
// OK
#include
#include
#define foreach BOOST_FOREACH
// Error
#include
#define foreach BOOST_FOREACH
#include
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