1
//-----------------------------------------------------------------------------
2
// boost variant/detail/generic_result_type.hpp header file
3
// See http://www.boost.org for updates, documentation, and revision history.
4
//-----------------------------------------------------------------------------
9
// Distributed under the Boost Software License, Version 1.0. (See
10
// accompanying file LICENSE_1_0.txt or copy at
11
// http://www.boost.org/LICENSE_1_0.txt)
13
#ifndef BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
14
#define BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
16
#include "boost/config.hpp"
18
//////////////////////////////////////////////////////////////////////////
19
// (workaround) macro BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE
21
// On compilers with BOOST_NO_VOID_RETURNS, this macro provides a route
22
// to a single syntax for dealing with template functions that may (but
23
// not necessarily) return nothing (i.e. void).
25
// BOOST_VARIANT_AUX_RETURN_VOID provided for compilers w/ (erroneous?)
26
// warnings about non-void functions not returning a value.
29
#if !defined(BOOST_NO_VOID_RETURNS)
31
#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
35
#define BOOST_VARIANT_AUX_RETURN_VOID \
38
#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
42
#else // defined(BOOST_NO_VOID_RETURNS)
45
namespace detail { namespace variant {
47
struct fake_return_void
54
fake_return_void(const T&)
60
struct no_void_returns_helper
66
struct no_void_returns_helper<void>
68
typedef fake_return_void type;
71
}} // namespace detail::variant
74
#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
75
BOOST_DEDUCED_TYPENAME \
76
::boost::detail::variant::no_void_returns_helper< T >::type \
79
#define BOOST_VARIANT_AUX_RETURN_VOID \
80
return ::boost::detail::variant::fake_return_void() \
83
#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
84
::boost::detail::variant::fake_return_void
86
#endif // BOOST_NO_VOID_RETURNS workaround
88
#endif // BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
1
//-----------------------------------------------------------------------------
2
// boost variant/detail/generic_result_type.hpp header file
3
// See http://www.boost.org for updates, documentation, and revision history.
4
//-----------------------------------------------------------------------------
9
// Distributed under the Boost Software License, Version 1.0. (See
10
// accompanying file LICENSE_1_0.txt or copy at
11
// http://www.boost.org/LICENSE_1_0.txt)
13
#ifndef BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
14
#define BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
16
#include "boost/config.hpp"
18
//////////////////////////////////////////////////////////////////////////
19
// (workaround) macro BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE
21
// On compilers with BOOST_NO_VOID_RETURNS, this macro provides a route
22
// to a single syntax for dealing with template functions that may (but
23
// not necessarily) return nothing (i.e. void).
25
// BOOST_VARIANT_AUX_RETURN_VOID provided for compilers w/ (erroneous?)
26
// warnings about non-void functions not returning a value.
29
#if !defined(BOOST_NO_VOID_RETURNS)
31
#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
35
#define BOOST_VARIANT_AUX_RETURN_VOID \
38
#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
42
#else // defined(BOOST_NO_VOID_RETURNS)
45
namespace detail { namespace variant {
47
struct fake_return_void
54
fake_return_void(const T&)
60
struct no_void_returns_helper
66
struct no_void_returns_helper<void>
68
typedef fake_return_void type;
71
}} // namespace detail::variant
74
#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
75
BOOST_DEDUCED_TYPENAME \
76
::boost::detail::variant::no_void_returns_helper< T >::type \
79
#define BOOST_VARIANT_AUX_RETURN_VOID \
80
return ::boost::detail::variant::fake_return_void() \
83
#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
84
::boost::detail::variant::fake_return_void
86
#endif // BOOST_NO_VOID_RETURNS workaround
88
#endif // BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP