Следующий код не компилируется...
namespace {
template<typename T, template<typename> class D>
struct Base {
Base(const T& _t) : t(_t) { }
T t;
};
template<typename T>
struct Derived : Base<T, Derived> {
Derived(const T& _t) : Base<T, Derived>(_t) { }
};
}
int main(int argc, char* argv[]) {
Derived<int> d(1);
return 0;
}
В строке есть ошибка компиляции - Derived(const T& _t) : Base<T, Derived>(_t) { }
Ошибка C3200 '`anonymous-namespace':: Derived ': недопустимый шаблон аргумент для параметра шаблона 'D', ожидаемый шаблон класса
Это работает, если я предоставляю любой другой класс с аргументом шаблона вместо самого Derived
template<typename T>
struct Other {
};
template<typename T>
struct Derived : Base<T, Other> {
Derived(const T& _t) : Base<T, Other>(_t) { }
};