I added the two following #defines to the C++ Preprocessor preference panel:
#define BOOST_NO_STD_USE_FACET #define BOOST_HAS_TWO_ARG_USE_FACET
and it compiled.
Is this the right fix?
Yes that's the right fix.
#ifndef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG I.e. If _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG is not defined, you get the standard use_facet signature. And _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG is not defined by default. Indeed this flag is something of a relic and hasn't been used (by Metrowerks) for several years. Is there a reason that you have defined it? And if so, could you simply not define it, and solve your problem that way?
Oh! <slapping forehead> I just reviewed our sources with respect to this flag. If you choose "ms-compatible mangling", and I think that means VC++ 6.0 compatible, then _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG gets turned on automatically. The early MS mangling scheme simply does not support explicit template arguments for functions. Do you really need this feature? If so, continue pursuing the boost-end fix. Otherwise, I recommend turning it off and going standard.
Thanks Howard, I'm adding: #ifdef _MSL_NO_EXPLICIT_FUNC_TEMPLATE_ARG # define BOOST_NO_STD_USE_FACET # define BOOST_HAS_TWO_ARG_USE_FACET #endif To msl.hpp as a fix for this. <shameless hint> Of course what we really need is someone to volunteer to run the tests on the Mac with CW regularly ! ;-) John.