1 2 // (C) Copyright Tobias Schwinger 3 // 4 // Use modification and distribution are subject to the boost Software License, 5 // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). 6 7 //------------------------------------------------------------------------------ 8 9 // no include guards, this file is guarded externally 10 11 #ifdef __WAVE__ 12 // this file has been generated from the master.hpp file in the same directory 13 # pragma wave option(preserve: 0) 14 #endif 15 16 #if !defined(BOOST_PP_VALUE) 17 # include <boost/preprocessor/slot/slot.hpp> 18 # include <boost/preprocessor/iteration/self.hpp> 19 20 # include <boost/function_types/detail/encoding/def.hpp> 21 # include <boost/function_types/detail/encoding/aliases_def.hpp> 22 23 namespace boost { namespace function_types { 24 25 namespace detail 26 { 27 template<class Tag, class RefTag> struct selector_bits 28 { 29 # define BOOST_PP_VALUE non_member|member|non_variadic|variadic 30 # include BOOST_PP_ASSIGN_SLOT(1) 31 32 BOOST_STATIC_CONSTANT(bits_t, value = ( 33 (::boost::function_types::detail::bits<Tag>::value & BOOST_FT_default_cc) 34 | (::boost::function_types::detail::bits<RefTag>::value & BOOST_PP_SLOT(1)) 35 )); 36 }; 37 38 template<bits_t SelectorBits> struct default_cc_tag; 39 40 template<class Tag, class RefTag> struct retag_default_cc 41 : detail::compound_tag 42 < Tag, detail::default_cc_tag< 43 ::boost::function_types::detail::selector_bits<Tag,RefTag>::value > > 44 { }; 45 46 template<bits_t SelectorBits> struct default_cc_tag 47 { 48 typedef null_tag::bits bits; 49 typedef null_tag::mask mask; 50 }; 51 52 class test_class; 53 typedef constant<BOOST_FT_cc_mask> cc_mask_constant; 54 55 # define BOOST_FT_self \ 56 <boost/function_types/detail/pp_retag_default_cc/master.hpp> 57 58 # define default_cc_ BOOST_FT_default_cc 59 60 # define BOOST_PP_VALUE default_cc_|non_member|non_variadic 61 # define BOOST_FT_tester void (*tester)() 62 # define BOOST_PP_INDIRECT_SELF BOOST_FT_self 63 # include BOOST_PP_INCLUDE_SELF() 64 65 # define BOOST_PP_VALUE default_cc_|non_member|variadic 66 # define BOOST_FT_tester void (*tester)(...) 67 # define BOOST_PP_INDIRECT_SELF BOOST_FT_self 68 # include BOOST_PP_INCLUDE_SELF() 69 70 # define BOOST_PP_VALUE default_cc_|member|non_variadic 71 # define BOOST_FT_tester void (test_class::*tester)() 72 # define BOOST_PP_INDIRECT_SELF BOOST_FT_self 73 # include BOOST_PP_INCLUDE_SELF() 74 75 # define BOOST_PP_VALUE default_cc_|member|variadic 76 # define BOOST_FT_tester void (test_class::*tester)(...) 77 # define BOOST_PP_INDIRECT_SELF BOOST_FT_self 78 # include BOOST_PP_INCLUDE_SELF() 79 80 # undef default_cc_ 81 82 # undef BOOST_FT_self 83 84 } } } // namespace ::boost::function_types::detail 85 86 # include <boost/function_types/detail/encoding/aliases_undef.hpp> 87 # include <boost/function_types/detail/encoding/undef.hpp> 88 89 #else // if defined(BOOST_PP_VALUE) 90 91 # include BOOST_PP_ASSIGN_SLOT(1) 92 93 template<> struct default_cc_tag<BOOST_PP_SLOT(1)> 94 { 95 typedef BOOST_FT_tester; 96 typedef mpl::bitand_<components<tester>::bits,cc_mask_constant> bits; 97 typedef cc_mask_constant mask; 98 }; 99 100 # undef BOOST_FT_tester 101 102 #endif 103 104