49 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | // Boost.Range library | ||
|  | // | ||
|  | //  Copyright Arno Schoedl & Neil Groves 2009. | ||
|  | //  Use, modification and distribution is subject to the Boost Software | ||
|  | //  License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | ||
|  | //  http://www.boost.org/LICENSE_1_0.txt) | ||
|  | // | ||
|  | // For more information, see http://www.boost.org/libs/range/ | ||
|  | // | ||
|  | #ifndef BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED | ||
|  | #define BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED | ||
|  | 
 | ||
|  | #if defined(_MSC_VER) | ||
|  | # pragma once | ||
|  | #endif | ||
|  | 
 | ||
|  | #include <boost/config.hpp> | ||
|  | #include <boost/preprocessor/cat.hpp> | ||
|  | #include <boost/mpl/has_xxx.hpp> | ||
|  | 
 | ||
|  | #if !defined(BOOST_MPL_CFG_NO_HAS_XXX) | ||
|  | 
 | ||
|  | // Defines extract_some_typedef<T> which exposes T::some_typedef as | ||
|  | // extract_some_typedef<T>::type if T::some_typedef exists. Otherwise | ||
|  | // extract_some_typedef<T> is empty. | ||
|  | #define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef )                          \ | ||
|  |     BOOST_MPL_HAS_XXX_TRAIT_DEF(a_typedef)                                      \ | ||
|  |     template< typename  C, bool B = BOOST_PP_CAT(has_, a_typedef)<C>::value >   \ | ||
|  |     struct BOOST_PP_CAT(extract_, a_typedef)                                    \ | ||
|  |     {};                                                                         \ | ||
|  |     template< typename C >                                                      \ | ||
|  |     struct BOOST_PP_CAT(extract_, a_typedef)< C, true >                         \ | ||
|  |     {                                                                           \ | ||
|  |         typedef BOOST_DEDUCED_TYPENAME C::a_typedef type;                       \ | ||
|  |     }; | ||
|  | 
 | ||
|  | #else | ||
|  | 
 | ||
|  | #define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef )                          \ | ||
|  |     template< typename C >                                                      \ | ||
|  |     struct BOOST_PP_CAT(extract_, a_typedef)                                    \ | ||
|  |     {                                                                           \ | ||
|  |         typedef BOOST_DEDUCED_TYPENAME C::a_typedef type;                       \ | ||
|  |     }; | ||
|  | 
 | ||
|  | #endif | ||
|  | 
 | ||
|  | #endif // include guard |