// (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). //------------------------------------------------------------------------------ #ifndef BOOST_FT_DETAIL_TAGS_HPP_INCLUDED #define BOOST_FT_DETAIL_TAGS_HPP_INCLUDED #include #include #include namespace boost { namespace function_types { namespace detail { typedef long bits_t; template struct constant : boost::integral_constant { }; template struct property_tag { typedef constant bits; typedef constant mask; }; template struct bits : T::bits { }; template struct mask : T::mask { }; // forward declaration, defined in pp_tags template struct encode_bits_impl; // forward declaration, defined in pp_tags template struct tag_ice; // forward declaration, defined in retag_default_cc template struct retag_default_cc; template struct encode_bits : constant< ::boost::function_types::detail::encode_bits_impl::value > { }; template struct compound_tag { typedef constant< ::boost::function_types::detail::tag_ice < ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value , ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value >::combined_bits > bits; typedef constant< ::boost::function_types::detail::tag_ice < ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value , ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value >::combined_mask > mask; }; template struct changed_tag : Base { typedef mpl::bitxor_ bits; }; template struct represents_impl : boost::integral_constant::value , ::boost::function_types::detail::mask::value , ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value >::match > { }; } // namespace detail typedef detail::property_tag<0,0> null_tag; template struct tag : detail::compound_tag< detail::compound_tag, detail::compound_tag > { }; #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION template struct tag : detail::compound_tag,Tag3> { }; template struct tag : detail::compound_tag { }; template struct tag : Tag1 { }; #endif template struct represents : detail::represents_impl > { }; template struct extract { typedef detail::constant< ::boost::function_types::detail::tag_ice < ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value , ::boost::function_types::detail::bits::value , ::boost::function_types::detail::mask::value >::extracted_bits > bits; typedef detail::constant< ::boost::function_types::detail::mask::value > mask; }; } } // namespace ::boost::function_types #include namespace boost { namespace function_types { #define BOOST_FT_cc_file #include } } // namespace boost::function_types #endif