89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//-----------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// boost variant/detail/generic_result_type.hpp header file
							 | 
						||
| 
								 | 
							
								// See http://www.boost.org for updates, documentation, and revision history.
							 | 
						||
| 
								 | 
							
								//-----------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Copyright (c) 2003
							 | 
						||
| 
								 | 
							
								// Eric Friedman
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Distributed under 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)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/config.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// (workaround) macro BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// On compilers with BOOST_NO_VOID_RETURNS, this macro provides a route
							 | 
						||
| 
								 | 
							
								// to a single syntax for dealing with template functions that may (but
							 | 
						||
| 
								 | 
							
								// not necessarily) return nothing (i.e. void).
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// BOOST_VARIANT_AUX_RETURN_VOID provided for compilers w/ (erroneous?)
							 | 
						||
| 
								 | 
							
								// warnings about non-void functions not returning a value.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if !defined(BOOST_NO_VOID_RETURNS)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
							 | 
						||
| 
								 | 
							
								    T   \
							 | 
						||
| 
								 | 
							
								    /**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define BOOST_VARIANT_AUX_RETURN_VOID  \
							 | 
						||
| 
								 | 
							
								    /**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
							 | 
						||
| 
								 | 
							
								    void    \
							 | 
						||
| 
								 | 
							
								    /**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else // defined(BOOST_NO_VOID_RETURNS)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								namespace detail { namespace variant {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct fake_return_void
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    fake_return_void()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    template <typename T>
							 | 
						||
| 
								 | 
							
								    fake_return_void(const T&)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <typename T>
							 | 
						||
| 
								 | 
							
								struct no_void_returns_helper
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    typedef T type;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template <>
							 | 
						||
| 
								 | 
							
								struct no_void_returns_helper<void>
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    typedef fake_return_void type;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}} // namespace detail::variant
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
							 | 
						||
| 
								 | 
							
								    BOOST_DEDUCED_TYPENAME                                           \
							 | 
						||
| 
								 | 
							
								        ::boost::detail::variant::no_void_returns_helper< T >::type  \
							 | 
						||
| 
								 | 
							
								    /**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define BOOST_VARIANT_AUX_RETURN_VOID  \
							 | 
						||
| 
								 | 
							
								    return ::boost::detail::variant::fake_return_void()     \
							 | 
						||
| 
								 | 
							
								    /**/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE  \
							 | 
						||
| 
								 | 
							
								    ::boost::detail::variant::fake_return_void
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_NO_VOID_RETURNS workaround
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
							 |