]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/variant/doc/reference/variant_fwd.xml
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / variant / doc / reference / variant_fwd.xml
CommitLineData
7c673cae
FG
1<?xml version="1.0" encoding="utf-8" ?>
2<!DOCTYPE header PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
3 "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd">
4<!--
5 Copyright 2003, Eric Friedman, Itay Maman.
6 Copyright 2016, Antony Polukhin.
7
8 Distributed under the Boost Software License, Version 1.0. (See accompanying
9 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
10-->
11<header name="boost/variant/variant_fwd.hpp">
12 <using-namespace name="boost"/>
13
14 <para>Provides forward declarations of the
15 <code><classname>boost::variant</classname></code>,
16 <code><classname>boost::make_variant_over</classname></code>,
17 <code><classname>boost::make_recursive_variant</classname></code>, and
18 <code><classname>boost::make_recursive_variant_over</classname></code>
19 class templates and the <code>boost::recursive_variant_</code> tag type.
20 Also defines several preprocessor symbols, as described below.</para>
21
22 <macro name="BOOST_VARIANT_LIMIT_TYPES">
23 <purpose>
24 <simpara>Expands to the length of the
25 template parameter list for
26 <code><classname>variant</classname></code>. Not used if
27 <code><macroname>BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES</macroname></code>
28 is not defined.
29 </simpara>
30 </purpose>
31
32 <description>
33 <para><emphasis role="bold">Note</emphasis>: Conforming
34 implementations of <code>variant</code> must allow at least ten
35 template arguments. That is, BOOST_VARIANT_LIMIT_TYPES must be greater
36 or equal to <code>10</code>.</para>
37 </description>
38 </macro>
39
40 <macro name="BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES">
41 <purpose>
42 <simpara>If this macro is defined, then library won't use C++11 variadic templates.
43 Users may define this macro to make
44 <code><macroname>BOOST_VARIANT_ENUM_PARAMS</macroname></code>
45 and <code><macroname>BOOST_VARIANT_ENUM_SHIFTED_PARAMS</macroname></code> expand
46 to a comma-separated sequence instead of variadic templates. Define this macro if
47 your compiler has problems with compilation of variadic templates.
48 </simpara>
49 </purpose>
50 </macro>
51
52 <macro name="BOOST_VARIANT_ENUM_PARAMS" kind="functionlike">
53 <macro-parameter name="param"/>
54
55 <purpose>
56 <simpara>Enumerate parameters for use with
57 <code><classname>variant</classname></code>.</simpara>
58 </purpose>
59
60 <description>
61 <para> When variadic templates are available and
62 <code><macroname>BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES</macroname></code>
63 is not defined, expands to variadic template list in the following manner:
64 <code><programlisting>
65 BOOST_VARIANT_ENUM_PARAMS(T) => T0, TN...
66 BOOST_VARIANT_ENUM_PARAMS(class T) => class T0, class... TN
67 BOOST_VARIANT_ENUM_PARAMS(class Something) => class Something0, class... SomethingN
68 BOOST_VARIANT_ENUM_PARAMS(typename Something) => typename Something0, typename... SomethingN
69 BOOST_VARIANT_ENUM_PARAMS(Something) => Something0, SomethingN...
70 BOOST_VARIANT_ENUM_PARAMS(Something) => Something0, SomethingN...
71 </programlisting></code>
72 </para>
73
74 <para>
75 Otherwise expands to a comma-separated sequence of length
76 <code><macroname>BOOST_VARIANT_LIMIT_TYPES</macroname></code>, where
77 each element in the sequence consists of the concatenation of
78 <emphasis>param</emphasis> with its zero-based index into the
79 sequence. That is,
80 <code>param ## 0, param ## 1, ..., param ## BOOST_VARIANT_LIMIT_TYPES - 1</code>.</para>
81
82 <para><emphasis role="bold">Rationale</emphasis>: This macro greatly
83 simplifies for the user the process of declaring
84 <code><classname>variant</classname></code> types
85 in function templates or explicit partial specializations of class
86 templates, as shown in the
87 <link linkend="variant.tutorial.preprocessor">tutorial</link>.</para>
88 </description>
89 </macro>
90
91 <macro name="BOOST_VARIANT_ENUM_SHIFTED_PARAMS" kind="functionlike">
92 <macro-parameter name="param"/>
93
94 <purpose>
95 <simpara>Enumerate all but the first parameter for use with
96 <code><classname>variant</classname></code>.</simpara>
97 </purpose>
98
99 <description>
100 <para> When variadic templates are available and
101 <code><macroname>BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES</macroname></code>
102 is not defined, expands to variadic template list in the following manner:
103 <code><programlisting>
104 BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T) => TN...
105 BOOST_VARIANT_ENUM_SHIFTED_PARAMS(class T) => class... TN
106 BOOST_VARIANT_ENUM_SHIFTED_PARAMS(class Something) => class... SomethingN
107 BOOST_VARIANT_ENUM_SHIFTED_PARAMS(typename Something) => typename... SomethingN
108 BOOST_VARIANT_ENUM_SHIFTED_PARAMS(Something) => SomethingN...
109 BOOST_VARIANT_ENUM_SHIFTED_PARAMS(Something) => SomethingN...
110 </programlisting></code>
111 </para>
112
113 <para>
114 Otherwise expands to a comma-separated sequence of length
115 <code><macroname>BOOST_VARIANT_LIMIT_TYPES</macroname> - 1</code>,
116 where each element in the sequence consists of the concatenation of
117 <emphasis>param</emphasis> with its one-based index into the sequence.
118 That is,
119 <code>param ## 1, ..., param ## BOOST_VARIANT_LIMIT_TYPES - 1</code>.</para>
120
121 <para><emphasis role="bold">Note</emphasis>: This macro results in the
122 same expansion as
123 <code><macroname>BOOST_VARIANT_ENUM_PARAMS</macroname></code> -- but
124 without the first term.</para>
125 </description>
126 </macro>
127
128 <macro name="BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT">
129 <purpose>
130 <simpara>Indicates absence of support for specifying the bounded types
131 of a <code><classname>variant</classname></code> by the elements of a
132 type sequence.</simpara>
133 </purpose>
134
135 <description>
136 <para>Defined only if
137 <code><classname>make_variant_over</classname></code> and
138 <code><classname>make_recursive_variant_over</classname></code>
139 are not supported for some reason on the target compiler.</para>
140 </description>
141 </macro>
142
143 <macro name="BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT">
144 <purpose>
145 <simpara>Indicates
146 <code><classname>make_recursive_variant</classname></code> operates in
147 an implementation-defined manner.</simpara>
148 </purpose>
149
150 <description>
151 <para>Defined only if
152 <code><classname>make_recursive_variant</classname></code> does not
153 operate as documented on the target compiler, but rather in an
154 implementation-defined manner.</para>
155
156 <para><emphasis role="bold">Implementation Note</emphasis>: If
157 <code>BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT</code> is
158 defined for the target compiler, the current implementation uses the
159 <libraryname>MPL</libraryname> lambda mechanism to approximate the
160 desired behavior. (In most cases, however, such compilers do not have
161 full lambda support either.)</para>
162 </description>
163 </macro>
164</header>