CLASS TEMP(3)

NAME
boost::make_recursive_variant - Simplifies declaration of recursive variant types.

SYNOPSIS

// In header: <boost/variant/recursive_variant.hpp>
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):

    &#8226; If Ti is
                  boost::recursive_variant_ then:
                  variant< U1, U2, ..., UN >;.RE

        &#8226; Else if Ti is of the
                      form X * then:
                      substitute(X) *;.RE

            &#8226; Else if Ti is of the
                          form X & then:
                          substitute(X) &;.RE

                &#8226; Else if Ti is of the
                              form R (*)( X1, X2, ..., XN ) then:
                              substitute(R) (*)( substitute(X1), substitute(X2), ..., substitute(XN) );.RE

                    &#8226; Else if Ti is of the
                                  form F < X1, X2, ..., XN > then:
                                  F< substitute(X1), substitute(X2), ..., substitute(XN) >;.RE

                        &#8226; Else: Ti..RE

                    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 &#8220;Recursive types with make_recursive_variant&#8221;.

                    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.