boost/function_types/detail/to_sequence.hpp
// (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_TO_SEQUENCE_HPP_INCLUDED #define BOOST_FT_DETAIL_TO_SEQUENCE_HPP_INCLUDED #include <boost/mpl/eval_if.hpp> #include <boost/mpl/identity.hpp> #include <boost/mpl/is_sequence.hpp> #include <boost/mpl/placeholders.hpp> #include <boost/type_traits/add_reference.hpp> #include <boost/function_types/is_callable_builtin.hpp> namespace boost { namespace function_types { namespace detail { // wrap first arguments in components, if callable builtin type template<typename T> struct to_sequence { typedef typename mpl::eval_if < is_callable_builtin<T> , to_sequence< components<T> > , mpl::identity< T > >::type type; }; // reduce template instantiations, if possible template<typename T, typename U> struct to_sequence< components<T,U> > { typedef typename components<T,U>::types type; }; } } } // namespace ::boost::function_types::detail #endif





