Class template make_recursive_variant
boost::make_recursive_variant — Simplifies declaration of recursive variant types.
 
Synopsis
Description
type имеет эквивалент поведения во всех отношениях по отношению к некоторому варианту< U1, U2, ..., UN >, где каждый тип Ui является результатом соответствующего типа Ti, претерпевавшего функцию преобразования. Следующий псевдокод определяет поведение этого преобразования (назовем его substitute):
- Если Tiboost::recursive_variant_, то:variant;
- Если Tiимеет формуX *, то:substitute(X) *;
- Если Tiимеет формуX &, то:substitute(X) &;
- Если Tiимеет формуR (*)(X1, X2,..., XN), то:заменитель (R) (*)(заменитель(X1), заменитель(X2), ..., заменитель(XN));
- Если Tiимеет формуF , то:F<заменитель(X1), заменитель(X2), ..., заменитель(XN) >;
- Другое: Ti.
Обратите внимание, что cv-квалификаторы сохраняются и что фактический процесс, как правило, немного сложнее. Тем не менее, вышеизложенное передает основную идею, а также описывает степень замещения.
Использование make_recursive_variant показано в  разделе под названием “Рекурсивные типы с make_recursive_variant”.
Портативность: Из-за проблем стандартного соответствия в нескольких компиляторах make_recursive_variant не поддерживается повсеместно. На этих компиляторах библиотека указывает на отсутствие поддержки через определение символа препроцессора BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT.