49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			1.1 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_RESULT_TYPE_HPP_INCLUDED | ||
|  | #define BOOST_FT_RESULT_TYPE_HPP_INCLUDED | ||
|  | 
 | ||
|  | #include <boost/blank.hpp> | ||
|  | #include <boost/mpl/if.hpp> | ||
|  | 
 | ||
|  | #include <boost/mpl/aux_/lambda_support.hpp> | ||
|  | 
 | ||
|  | #include <boost/mpl/at.hpp> | ||
|  | 
 | ||
|  | #include <boost/function_types/is_callable_builtin.hpp> | ||
|  | #include <boost/function_types/components.hpp> | ||
|  | 
 | ||
|  | namespace boost  | ||
|  | {  | ||
|  |   namespace function_types  | ||
|  |   { | ||
|  |     template< typename T > struct result_type; | ||
|  | 
 | ||
|  |     namespace detail | ||
|  |     { | ||
|  |       template<typename T> struct result_type_impl | ||
|  |         : mpl::at_c | ||
|  |           < typename function_types::components<T>::types, 0 > | ||
|  |       { }; | ||
|  |     } | ||
|  | 
 | ||
|  |     template<typename T> struct result_type | ||
|  |       : mpl::if_ | ||
|  |         < function_types::is_callable_builtin<T> | ||
|  |         , detail::result_type_impl<T>, boost::blank | ||
|  |         >::type | ||
|  |     {  | ||
|  |       BOOST_MPL_AUX_LAMBDA_SUPPORT(1,result_type,(T))  | ||
|  |     }; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | #endif | ||
|  | 
 |