46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
// (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
 | 
						|
 |