| 53 | #elif BOOST_WORKAROUND(BOOST_MSVC, <= 1600) && BOOST_WORKAROUND(BOOST_MSVC, >= 1400) |
| 54 | template <typename T1, typename T2> |
| 55 | struct requires_msvc_workaround |
| 56 | { |
| 57 | typedef typename T2::type type; |
| 58 | }; |
| 59 | |
| 60 | #define BOOST_CONCEPT_STRIP_PARENS(x) x |
| 61 | #define BOOST_CONCEPT_TEST_SINGLE_REQUIREMENT(x) ::boost::_requires_<void(*) (x) > |
| 62 | #define BOOST_CONCEPT_CLOSE_TEMPLATE(r, data, elem) > |
| 63 | #define BOOST_CONCEPT_OPEN_TEMPLATE(r, data, i, elem) ::boost::requires_msvc_workaround< BOOST_CONCEPT_TEST_SINGLE_REQUIREMENT elem , |
| 64 | |
| 65 | #define BOOST_CONCEPT_REQUIRES(models , result) \ |
| 66 | typename \ |
| 67 | BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_OPEN_TEMPLATE, 0, models) \ |
| 68 | ::boost::parameter::aux::unaryfunptr_arg_type<void(*) result> \ |
| 69 | BOOST_PP_SEQ_FOR_EACH(BOOST_CONCEPT_CLOSE_TEMPLATE, 0, models) \ |
| 70 | ::type |
| 71 | |