Class template make_recursive_variant
boost::make_recursive_variant — Simplifies declaration of recursive variant
types.
Synopsis
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
Ti
is
boost::recursive_variant_
then:
variant< U1, U2, ..., UN >
;
- Else if
Ti
is of the
form X *
then:
substitute(X) *
;
- Else if
Ti
is of the
form X &
then:
substitute(X) &
;
- Else if
Ti
is of the
form R (*)( X1, X2, ..., XN )
then:
substitute(R) (*)( substitute(X1), substitute(X2), ..., substitute(XN) )
;
- Else if
Ti
is of the
form F < 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
.