
craigp writes:
For some reason, I can't get the IDE to compile BOOST_MPL_ASSERT. I tried this:
#include
#include int main() { BOOST_MPL_ASSERT(( boost::is_same< char, char > )); }
and it gives the following errors:
d:\dev\boost.cvs\boost\libs\fusion\example\extension\test_example.cpp(31) : error C2143: syntax error : missing ';' before '=' d:\dev\boost.cvs\boost\libs\fusion\example\extension\test_example.cpp(31) : error C2143: syntax error : missing ';' before '='
what's even stranger is that i copied/pasted the pre-processed file, and that compiled just fine:
static const std::size_t mpl_assertion_in_line_26 = sizeof( boost::mpl::assertion_failed<false>( boost::mpl::assert_arg( (void (*) ( boost::is_same< char, char > ))0, 1 ) ) );
anyone else seen something like this before?? all the mpl regression tests compile fine via bjam (using msvc 7.1), so it appears ide-specific, somehow...
This is a known issue: the errors you see are specific to MSVC "Edit & Continue" mode, in which the __LINE__ macro (used internally in MPL asserts) stops being a preprosessing-time constant and becomes a reference to a global run-time variable (http://support.microsoft.com/kb/199057). To alleviate this problem, Microsoft has introduced a proprietary predefined macro __COUNTER__ (http://msdn2.microsoft.com/en-us/library/b0084kay.aspx), intended to serve as a replacement for __LINE__ in situations where the latter is used to generate a unique identifier rather than to actually refer to a line number (which is the case with MPL asserts). Unfortunately, because __COUNTER__ is incremented every time it's used, fixing this is a bit more complicated then just a search & replace for __LINE__, and therefore it has to wait for 1.35 (or you can grab the latest version of "boost/mpl/assert.hpp" from Boost CVS's HEAD trunk). HTH, -- Aleksey Gurtovoy MetaCommunications Engineering