61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // Copyright (C) 2006 Arkadiy Vertleyb
 | |
| // Use, modification and distribution is subject to the Boost Software
 | |
| // License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
 | |
| 
 | |
| #ifndef BOOST_TYPEOF_NATIVE_HPP_INCLUDED
 | |
| #define BOOST_TYPEOF_NATIVE_HPP_INCLUDED
 | |
| 
 | |
| #ifndef MSVC_TYPEOF_HACK
 | |
| 
 | |
| #ifdef BOOST_NO_SFINAE
 | |
| 
 | |
| namespace boost { namespace type_of {
 | |
| 
 | |
|     template<class T> 
 | |
|         T& ensure_obj(const T&);
 | |
| 
 | |
| }}
 | |
| 
 | |
| #else
 | |
| 
 | |
| #include <boost/type_traits/is_function.hpp> 
 | |
| #include <boost/utility/enable_if.hpp>
 | |
| 
 | |
| namespace boost { namespace type_of {
 | |
| # ifdef BOOST_NO_SFINAE
 | |
|     template<class T> 
 | |
|     T& ensure_obj(const T&);
 | |
| # else
 | |
|     template<typename T>
 | |
|         typename enable_if<is_function<T>, T&>::type
 | |
|         ensure_obj(T&);
 | |
| 
 | |
|     template<typename T>
 | |
|         typename disable_if<is_function<T>, T&>::type
 | |
|         ensure_obj(const T&);
 | |
| # endif
 | |
| }}
 | |
| 
 | |
| #endif//BOOST_NO_SFINAE
 | |
| 
 | |
| #define BOOST_TYPEOF(expr) BOOST_TYPEOF_KEYWORD(boost::type_of::ensure_obj(expr))
 | |
| #define BOOST_TYPEOF_TPL BOOST_TYPEOF
 | |
| 
 | |
| #define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
 | |
|     struct name {\
 | |
|         typedef BOOST_TYPEOF_TPL(expr) type;\
 | |
|     };
 | |
| 
 | |
| #define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
 | |
|     struct name {\
 | |
|         typedef BOOST_TYPEOF(expr) type;\
 | |
|     };
 | |
| 
 | |
| #endif//MSVC_TYPEOF_HACK
 | |
| 
 | |
| #define BOOST_TYPEOF_REGISTER_TYPE(x)
 | |
| #define BOOST_TYPEOF_REGISTER_TEMPLATE(x, params)
 | |
| 
 | |
| #endif//BOOST_TYPEOF_NATIVE_HPP_INCLUDED
 | |
| 
 | 
