source: NonGTP/Boost/boost/variant/detail/generic_result_type.hpp @ 857

Revision 857, 2.3 KB checked in by igarcia, 18 years ago (diff)
Line 
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
Note: See TracBrowser for help on using the repository browser.