Index: requires.hpp =================================================================== --- requires.hpp (revision 64735) +++ requires.hpp (working copy) @@ -50,6 +50,31 @@ # define BOOST_CONCEPT_REQUIRES(models, result) \ typename ::boost::parameter::aux::unaryfunptr_arg_type::type +#elif BOOST_WORKAROUND(BOOST_MSVC, == 1600) +template +struct requires_msvc10 +{ + typedef typename T2::type type; +}; + +template +struct relay_type_msvc10 +{ + typedef T type; +}; + +#define BOOST_CONCEPT_STRIP_PARENS(x) x +#define BOOST_CONCEPT_TEST_SINGLE_REQUIREMENT(x) decltype(::boost::_requires_::value) +#define BOOST_CONCEPT_CLOSE_TEMPLATE(r, data, elem) > +#define BOOST_CONCEPT_OPEN_TEMPLATE(r, data, i, elem) ::boost::requires_msvc10< 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::relay_type_msvc10< BOOST_CONCEPT_STRIP_PARENS result> \ + 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