Любопытный миксин с вариадическим конструктором

У меня есть фрагмент кода, включающий в себя variadic mixin crtp некоторых типов и несколько связанных вопросов. Правильно ли я понимаю, что в следующем коде второй конструктор просто передает копии экземпляров тех классов, которые использовались для создания экземпляра X, конструкторам тех же самых классов?

template<class DerivedT>
struct CuriousBase{};

template<template<typename> typename... Features>
struct X : Features<X<Features...>> ... {
X() = default;
X(Features<X<Features...>> ...f) : Features<X<Features...>>(f)... {}
};

int main(){
auto x = X<CuriousBase>{};
}

каковы варианты использования для такого поведения и в чем разница между этим образцом и следующим фрагментом?

template<class DerivedT>
struct CuriousBase{};

template<template<typename> typename... Features>
struct X : Features<X<Features...>> ... {
X() = default;
X(Features<X> ...f) : Features<X>(f)... {}
};

int main(){
auto x = X<CuriousBase>{};
}

Оба компилируются, но я подумал, что нужно явно указать, что X сам по себе является шаблоном с переменным классом, но в этом нет необходимости …

помощь очень ценится

0

Решение

X это введенное имя класса, так и есть X а также X<Features...> эквивалентны внутри класса.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]