| | 53 | #elif BOOST_WORKAROUND(BOOST_MSVC, == 1600) |
| | 54 | template <typename T1, typename T2> |
| | 55 | struct requires_msvc10 |
| | 56 | { |
| | 57 | typedef typename T2::type type; |
| | 58 | }; |
| | 59 | |
| | 60 | template <typename T> |
| | 61 | struct relay_type_msvc10 |
| | 62 | { |
| | 63 | typedef T type; |
| | 64 | }; |
| | 65 | |
| | 66 | #define BOOST_CONCEPT_STRIP_PARENS(x) x |
| | 67 | #define BOOST_CONCEPT_TEST_SINGLE_REQUIREMENT(x) decltype(::boost::_requires_<void(*) (x) >::value) |
| | 68 | #define BOOST_CONCEPT_CLOSE_TEMPLATE(r, data, elem) > |
| | 69 | #define BOOST_CONCEPT_OPEN_TEMPLATE(r, data, i, elem) ::boost::requires_msvc10< BOOST_CONCEPT_TEST_SINGLE_REQUIREMENT elem , |
| | 70 | |
| | 71 | #define BOOST_CONCEPT_REQUIRES(models , result) \ |
| | 72 | typename \ |
| | 73 | BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_OPEN_TEMPLATE, 0, models) \ |
| | 74 | ::boost::relay_type_msvc10< BOOST_CONCEPT_STRIP_PARENS result> \ |
| | 75 | BOOST_PP_SEQ_FOR_EACH(BOOST_CONCEPT_CLOSE_TEMPLATE, 0, models) \ |
| | 76 | ::type |
| | 77 | |