| <?xml version="1.0" encoding="utf-8" ?> |
| <header name="boost/variant/variant_fwd.hpp"> |
| <using-namespace name="boost"/> |
| |
| <para>Provides forward declarations of the |
| <code><classname>boost::variant</classname></code>, |
| <code><classname>boost::make_variant_over</classname></code>, |
| <code><classname>boost::make_recursive_variant</classname></code>, and |
| <code><classname>boost::make_recursive_variant_over</classname></code> |
| class templates and the <code>boost::recursive_variant_</code> tag type. |
| Also defines several preprocessor symbols, as described below.</para> |
| |
| <macro name="BOOST_VARIANT_LIMIT_TYPES"> |
| <purpose> |
| <simpara>Expands to the length of the |
| template parameter list for |
| <code><classname>variant</classname></code>.</simpara> |
| </purpose> |
| |
| <description> |
| <para><emphasis role="bold">Note</emphasis>: Conforming |
| implementations of <code>variant</code> must allow at least ten |
| template arguments. That is, BOOST_VARIANT_LIMIT_TYPES must be greater |
| or equal to <code>10</code>.</para> |
| </description> |
| </macro> |
| |
| <macro name="BOOST_VARIANT_ENUM_PARAMS" kind="functionlike"> |
| <macro-parameter name="param"/> |
| |
| <purpose> |
| <simpara>Enumerate parameters for use with |
| <code><classname>variant</classname></code>.</simpara> |
| </purpose> |
| |
| <description> |
| <para>Expands to a comma-separated sequence of length |
| <code><macroname>BOOST_VARIANT_LIMIT_TYPES</macroname></code>, where |
| each element in the sequence consists of the concatenation of |
| <emphasis>param</emphasis> with its zero-based index into the |
| sequence. That is, |
| <code>param ## 0, param ## 1, ..., param ## BOOST_VARIANT_LIMIT_TYPES - 1</code>.</para> |
| |
| <para><emphasis role="bold">Rationale</emphasis>: This macro greatly |
| simplifies for the user the process of declaring |
| <code><classname>variant</classname></code> types |
| in function templates or explicit partial specializations of class |
| templates, as shown in the |
| <link linkend="variant.tutorial.preprocessor">tutorial</link>.</para> |
| </description> |
| </macro> |
| |
| <macro name="BOOST_VARIANT_ENUM_SHIFTED_PARAMS" kind="functionlike"> |
| <macro-parameter name="param"/> |
| |
| <purpose> |
| <simpara>Enumerate all but the first parameter for use with |
| <code><classname>variant</classname></code>.</simpara> |
| </purpose> |
| |
| <description> |
| <para>Expands to a comma-separated sequence of length |
| <code><macroname>BOOST_VARIANT_LIMIT_TYPES</macroname> - 1</code>, |
| where each element in the sequence consists of the concatenation of |
| <emphasis>param</emphasis> with its one-based index into the sequence. |
| That is, |
| <code>param ## 1, ..., param ## BOOST_VARIANT_LIMIT_TYPES - 1</code>.</para> |
| |
| <para><emphasis role="bold">Note</emphasis>: This macro results in the |
| same expansion as |
| <code><macroname>BOOST_VARIANT_ENUM_PARAMS</macroname></code> -- but |
| without the first term.</para> |
| </description> |
| </macro> |
| |
| <macro name="BOOST_VARIANT_NO_REFERENCE_SUPPORT"> |
| <purpose> |
| <simpara>Indicates <code><classname>variant</classname></code> does not |
| support references as bounded types.</simpara> |
| </purpose> |
| |
| <description> |
| <para>Defined only if <code><classname>variant</classname></code> does |
| not support references as bounded types.</para> |
| </description> |
| </macro> |
| |
| <macro name="BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT"> |
| <purpose> |
| <simpara>Indicates absence of support for specifying the bounded types |
| of a <code><classname>variant</classname></code> by the elements of a |
| type sequence.</simpara> |
| </purpose> |
| |
| <description> |
| <para>Defined only if |
| <code><classname>make_variant_over</classname></code> and |
| <code><classname>make_recursive_variant_over</classname></code> |
| are not supported for some reason on the target compiler.</para> |
| </description> |
| </macro> |
| |
| <macro name="BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT"> |
| <purpose> |
| <simpara>Indicates |
| <code><classname>make_recursive_variant</classname></code> operates in |
| an implementation-defined manner.</simpara> |
| </purpose> |
| |
| <description> |
| <para>Defined only if |
| <code><classname>make_recursive_variant</classname></code> does not |
| operate as documented on the target compiler, but rather in an |
| implementation-defined manner.</para> |
| |
| <para><emphasis role="bold">Implementation Note</emphasis>: If |
| <code>BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT</code> is |
| defined for the target compiler, the current implementation uses the |
| <libraryname>MPL</libraryname> lambda mechanism to approximate the |
| desired behavior. (In most cases, however, such compilers do not have |
| full lambda support either.)</para> |
| </description> |
| </macro> |
| </header> |