Index: requires.hpp =================================================================== --- requires.hpp (revision 64745) +++ requires.hpp (working copy) @@ -50,6 +50,25 @@ # define BOOST_CONCEPT_REQUIRES(models, result) \ typename ::boost::parameter::aux::unaryfunptr_arg_type::type +#elif BOOST_WORKAROUND(BOOST_MSVC, <= 1600) && BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +template +struct requires_msvc_workaround +{ + typedef typename T2::type type; +}; + +#define BOOST_CONCEPT_STRIP_PARENS(x) x +#define BOOST_CONCEPT_TEST_SINGLE_REQUIREMENT(x) ::boost::_requires_ +#define BOOST_CONCEPT_CLOSE_TEMPLATE(r, data, elem) > +#define BOOST_CONCEPT_OPEN_TEMPLATE(r, data, i, elem) ::boost::requires_msvc_workaround< BOOST_CONCEPT_TEST_SINGLE_REQUIREMENT elem , + +#define BOOST_CONCEPT_REQUIRES(models , result) \ + typename \ + BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_OPEN_TEMPLATE, 0, models) \ + ::boost::parameter::aux::unaryfunptr_arg_type \ + BOOST_PP_SEQ_FOR_EACH(BOOST_CONCEPT_CLOSE_TEMPLATE, 0, models) \ + ::type + #elif BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) // Same thing as below without the initial typename