unspecified Simplifies declaration of recursive variant types. 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 . 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. boost::variant< unspecified > Exposes a recursive variant whose bounded types are the elements of the given type sequence. variant< unspecified > type has behavior equivalent in every respect to make_recursive_variant< Sequence[0], Sequence[1], ... >::type (where Sequence[i] denotes the i-th element of Sequence), except that no upper limit is imposed on the number of types. Notes: Sequence must meet the requirements of MPL's Sequence concept. Due to standard conformance problems in several compilers, make_recursive_variant_over may not be supported on your compiler. See BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT for more information.