123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #ifndef BOOST_LAMBDA_IS_INSTANCE_OF
- #define BOOST_LAMBDA_IS_INSTANCE_OF
- #include "boost/config.hpp"
- #include "boost/type_traits/conversion_traits.hpp"
- #include "boost/preprocessor/enum_shifted_params.hpp"
- #include "boost/preprocessor/repeat_2nd.hpp"
- #define BOOST_LAMBDA_CLASS(z, N,A) BOOST_PP_COMMA_IF(N) class
- #define BOOST_LAMBDA_CLASS_ARG(z, N,A) BOOST_PP_COMMA_IF(N) class A##N
- #define BOOST_LAMBDA_ARG(z, N,A) BOOST_PP_COMMA_IF(N) A##N
- #define BOOST_LAMBDA_CLASS_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_CLASS, NAME)
- #define BOOST_LAMBDA_CLASS_ARG_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_CLASS_ARG, NAME)
- #define BOOST_LAMBDA_ARG_LIST(n, NAME) BOOST_PP_REPEAT(n, BOOST_LAMBDA_ARG, NAME)
- namespace boost {
- namespace lambda {
- #define BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE(INDEX) \
- \
- namespace detail { \
- \
- template <template<BOOST_LAMBDA_CLASS_LIST(INDEX,T)> class F> \
- struct BOOST_PP_CAT(conversion_tester_,INDEX) { \
- template<BOOST_LAMBDA_CLASS_ARG_LIST(INDEX,A)> \
- BOOST_PP_CAT(conversion_tester_,INDEX) \
- (const F<BOOST_LAMBDA_ARG_LIST(INDEX,A)>&); \
- }; \
- \
- } \
- \
- template <class From, template <BOOST_LAMBDA_CLASS_LIST(INDEX,T)> class To> \
- struct BOOST_PP_CAT(is_instance_of_,INDEX) \
- { \
- private: \
- typedef ::boost::is_convertible< \
- From, \
- BOOST_PP_CAT(detail::conversion_tester_,INDEX)<To> \
- > helper_type; \
- \
- public: \
- BOOST_STATIC_CONSTANT(bool, value = helper_type::value); \
- };
- #define BOOST_LAMBDA_HELPER(z, N, A) BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE( BOOST_PP_INC(N) )
- BOOST_PP_REPEAT_2ND(4,BOOST_LAMBDA_HELPER,FOO)
- #undef BOOST_LAMBDA_HELPER
- #undef BOOST_LAMBDA_IS_INSTANCE_OF_TEMPLATE
- #undef BOOST_LAMBDA_CLASS
- #undef BOOST_LAMBDA_ARG
- #undef BOOST_LAMBDA_CLASS_ARG
- #undef BOOST_LAMBDA_CLASS_LIST
- #undef BOOST_LAMBDA_ARG_LIST
- #undef BOOST_LAMBDA_CLASS_ARG_LIST
- }
- }
- #endif
|