Class template make_recursive_variant
boost::make_recursive_variant — Simplifies declaration of recursive variant types.
Synopsis
template<typename T1, typename T2 = unspecified, ..., typename TN = unspecified> class make_recursive_variant { public: // types typedef boost::variant< unspecified > type; };
Description
type has behavior equivalent in every respect to
some variant< U1, U2, ..., UN >, where each type
Ui is the result of the
corresponding type Ti undergone a
transformation function. The following pseudo-code specifies the
behavior of this transformation (call it substitute):
- If
Tiisboost::recursive_variant_then:variant< U1, U2, ..., UN >; - Else if
Tiis of the formX *then:substitute(X) *; - Else if
Tiis of the formX &then:substitute(X) &; - Else if
Tiis of the formR (*)( X1, X2, ..., XN )then:substitute(R) (*)( substitute(X1), substitute(X2), ..., substitute(XN) ); - Else if
Tiis of the formF < X1, X2, ..., XN >then:F< substitute(X1), substitute(X2), ..., substitute(XN) >; - Else:
Ti.
Note that cv-qualifiers are preserved and that the actual process is generally a bit more complicated. However, the above does convey the essential idea as well as describe the extent of the substititions.
Use of make_recursive_variant is demonstrated in
the section called “Recursive types with make_recursive_variant”.
Portability: Due to standard
conformance issues in several compilers,
make_recursive_variant is not universally supported. On
these compilers the library indicates its lack of support via the
definition of the preprocessor symbol
BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT.
