// (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_COMPONENTS_AS_MPL_SEQUENCE_HPP_INCLUDED #define BOOST_FT_DETAIL_COMPONENTS_AS_MPL_SEQUENCE_HPP_INCLUDED #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace mpl { template<> struct size_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::size { }; }; template<> struct empty_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::empty { }; }; template<> struct front_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::front { }; }; template<> struct back_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::back { }; }; template<> struct at_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S, typename N > struct apply : mpl::at { }; }; template<> struct begin_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::begin { }; }; template<> struct end_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : mpl::end { }; }; template<> struct clear_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : S { typedef apply type; typedef typename mpl::clear< typename S::types >::type types; }; }; template<> struct push_front_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S, typename T > struct apply : S { typedef apply type; typedef typename mpl::push_front< typename S::types, T >::type types; }; }; template<> struct pop_front_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : S { typedef apply type; typedef typename mpl::pop_front< typename S::types >::type types; }; }; template<> struct push_back_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S, typename T > struct apply : S { typedef apply type; typedef typename mpl::push_back< typename S::types, T >::type types; }; }; template<> struct pop_back_impl < function_types::detail::components_mpl_sequence_tag > { template< typename S > struct apply : S { typedef apply type; typedef typename mpl::pop_back< typename S::types >::type types; }; }; } } // namespace ::boost::mpl #endif