|  | Home | Libraries | People | FAQ | More | 
boost::make_recursive_variant — Simplifies declaration of recursive variant types.
// 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; };
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):
          
Ti is
              boost::recursive_variant_ then:
              variant< U1, U2, ..., UN >;Ti is of the
              form X * then:
              substitute(X) *;Ti is of the
              form X & then:
              substitute(X) &;Ti is of the
              form R (*)( X1, X2, ..., XN ) then:
              substitute(R) (*)( substitute(X1), substitute(X2), ..., substitute(XN) );Ti is of the
              form F < X1, X2, ..., XN > then:
              F< substitute(X1), substitute(X2), ..., substitute(XN) >;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.