// (C) Copyright Tobias Schwinger // // Use modification and distribution are subject to the boost Software License, // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt). //------------------------------------------------------------------------------ // no include guards, this file is guarded externally #ifdef __WAVE__ // this file has been generated from the master.hpp file in the same directory # pragma wave option(preserve: 0) #endif #if !defined(BOOST_FT_PREPROCESSING_MODE) || defined(BOOST_FT_CONFIG_HPP_INCLUDED) # error "this file used with two-pass preprocessing, only" #endif #include #include namespace boost { namespace function_types { typedef detail::property_tag non_variadic; typedef detail::property_tag variadic; typedef detail::property_tag<0,BOOST_FT_const> non_const; typedef detail::property_tag const_qualified; typedef detail::property_tag<0,BOOST_FT_volatile> non_volatile; typedef detail::property_tag volatile_qualified; typedef detail::property_tag default_cc; #define BOOST_PP_VALUE BOOST_FT_const|BOOST_FT_volatile #include BOOST_PP_ASSIGN_SLOT(1) typedef detail::property_tag<0 , BOOST_PP_SLOT(1)> non_cv; typedef detail::property_tag const_non_volatile; typedef detail::property_tag volatile_non_const; typedef detail::property_tag cv_qualified; namespace detail { typedef constant full_mask; template struct encode_bits_impl { BOOST_STATIC_CONSTANT( bits_t, value = Flags | (BOOST_FT_default_cc * CCID) << 1 ); }; template struct encode_charr_impl { BOOST_STATIC_CONSTANT(std::size_t, value = (std::size_t)(1+ Flags | (BOOST_FT_default_cc * CCID) << 1 | Arity << BOOST_FT_arity_shift )); }; template struct decode_bits { BOOST_STATIC_CONSTANT(bits_t, flags = Bits & BOOST_FT_flags_mask); BOOST_STATIC_CONSTANT(bits_t, cc_id = ( (Bits & BOOST_FT_full_mask) / BOOST_FT_default_cc) >> 1 ); BOOST_STATIC_CONSTANT(bits_t, tag_bits = (Bits & BOOST_FT_full_mask)); BOOST_STATIC_CONSTANT(std::size_t, arity = (std::size_t) (Bits >> BOOST_FT_arity_shift) ); }; template struct tag_ice { BOOST_STATIC_CONSTANT(bool, match = RHS_bits == (LHS_bits & RHS_mask & (RHS_bits |~BOOST_FT_type_mask)) ); BOOST_STATIC_CONSTANT(bits_t, combined_bits = (LHS_bits & ~RHS_mask) | RHS_bits ); BOOST_STATIC_CONSTANT(bits_t, combined_mask = LHS_mask | RHS_mask ); BOOST_STATIC_CONSTANT(bits_t, extracted_bits = LHS_bits & RHS_mask ); }; #define BOOST_FT_mask BOOST_FT_type_mask typedef property_tag callable_builtin_tag; typedef property_tag nonmember_callable_builtin_tag; typedef property_tag function_tag; typedef property_tag reference_tag; typedef property_tag pointer_tag; typedef property_tag member_function_pointer_tag; typedef property_tag member_object_pointer_tag; typedef property_tag member_object_pointer_base; typedef property_tag member_pointer_tag; #undef BOOST_FT_mask #define BOOST_PP_VALUE BOOST_FT_function|BOOST_FT_non_variadic|BOOST_FT_default_cc #include BOOST_PP_ASSIGN_SLOT(1) #define BOOST_PP_VALUE BOOST_FT_type_mask|BOOST_FT_variadic_mask|BOOST_FT_cc_mask #include BOOST_PP_ASSIGN_SLOT(2) typedef property_tag< BOOST_PP_SLOT(1) , BOOST_PP_SLOT(2) > nv_dcc_func; #define BOOST_PP_VALUE \ BOOST_FT_member_function_pointer|BOOST_FT_non_variadic|BOOST_FT_default_cc #include BOOST_PP_ASSIGN_SLOT(1) typedef property_tag< BOOST_PP_SLOT(1) , BOOST_PP_SLOT(2) > nv_dcc_mfp; } // namespace detail } } // namespace ::boost::function_types