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
|