]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/variant/include/boost/variant/detail/make_variant_list.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / variant / include / boost / variant / detail / make_variant_list.hpp
CommitLineData
7c673cae
FG
1//-----------------------------------------------------------------------------
2// boost variant/detail/make_variant_list.hpp header file
3// See http://www.boost.org for updates, documentation, and revision history.
4//-----------------------------------------------------------------------------
5//
6// Copyright (c) 2002-2003 Eric Friedman, Itay Maman
7// Copyright (c) 2013 Antony Polukhin
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_MAKE_VARIANT_LIST_HPP
14#define BOOST_VARIANT_DETAIL_MAKE_VARIANT_LIST_HPP
15
16#include <boost/variant/variant_fwd.hpp>
17
18#include <boost/mpl/list.hpp>
19#include <boost/preprocessor/cat.hpp>
20#include <boost/preprocessor/enum.hpp>
21
22namespace boost {
23namespace detail { namespace variant {
24
25///////////////////////////////////////////////////////////////////////////////
26// (detail) metafunction make_variant_list
27//
28// Provides a MPL-compatible sequence with the specified non-void types
29// as arguments.
30//
31// Rationale: see class template convert_void (variant_fwd.hpp) and using-
32// declaration workaround (below).
33//
34
35#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
36
37template < typename... T >
38struct make_variant_list
39{
40 typedef typename mpl::list< T... >::type type;
41};
42
43#else // defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES)
44
45template < BOOST_VARIANT_ENUM_PARAMS(typename T) >
46struct make_variant_list
47{
48public: // metafunction result
49
50 // [Define a macro to convert any void(NN) tags to mpl::void...]
51# define BOOST_VARIANT_AUX_CONVERT_VOID(z, N,_) \
52 typename convert_void< BOOST_PP_CAT(T,N) >::type
53
54 // [...so that the specified types can be passed to mpl::list...]
55 typedef typename mpl::list<
56 BOOST_PP_ENUM(
57 BOOST_VARIANT_LIMIT_TYPES
58 , BOOST_VARIANT_AUX_CONVERT_VOID
59 , _
60 )
61 >::type type;
62
63 // [...and, finally, the conversion macro can be undefined:]
64# undef BOOST_VARIANT_AUX_CONVERT_VOID
65
66};
67
68#endif // BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES workaround
69
70}} // namespace detail::variant
71} // namespace boost
72
73#endif // BOOST_VARIANT_DETAIL_MAKE_VARIANT_LIST_HPP