]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/variant/include/boost/variant/detail/generic_result_type.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / variant / include / boost / variant / detail / generic_result_type.hpp
CommitLineData
7c673cae
FG
1//-----------------------------------------------------------------------------
2// boost variant/detail/generic_result_type.hpp header file
3// See http://www.boost.org for updates, documentation, and revision history.
4//-----------------------------------------------------------------------------
5//
6// Copyright (c) 2003
7// Eric Friedman
8//
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)
12
13#ifndef BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
14#define BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
15
16#include <boost/config.hpp>
17
18//////////////////////////////////////////////////////////////////////////
19// (workaround) macro BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE
20//
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).
24//
25// BOOST_VARIANT_AUX_RETURN_VOID provided for compilers w/ (erroneous?)
26// warnings about non-void functions not returning a value.
27//
28
29#if !defined(BOOST_NO_VOID_RETURNS)
30
31#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
32 T \
33 /**/
34
35#define BOOST_VARIANT_AUX_RETURN_VOID \
36 /**/
37
38#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
39 void \
40 /**/
41
42#else // defined(BOOST_NO_VOID_RETURNS)
43
44namespace boost {
45namespace detail { namespace variant {
46
47struct fake_return_void
48{
49 fake_return_void()
50 {
51 }
52
53 template <typename T>
54 fake_return_void(const T&)
55 {
56 }
57};
58
59template <typename T>
60struct no_void_returns_helper
61{
62 typedef T type;
63};
64
65template <>
66struct no_void_returns_helper<void>
67{
68 typedef fake_return_void type;
69};
70
71}} // namespace detail::variant
72} // namespace boost
73
74#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
75 BOOST_DEDUCED_TYPENAME \
76 ::boost::detail::variant::no_void_returns_helper< T >::type \
77 /**/
78
79#define BOOST_VARIANT_AUX_RETURN_VOID \
80 return ::boost::detail::variant::fake_return_void() \
81 /**/
82
83#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
84 ::boost::detail::variant::fake_return_void
85
86#endif // BOOST_NO_VOID_RETURNS workaround
87
88#endif // BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP