Этот код скомпилирован g cc с ошибкой
template<typename>
struct B {
};
template<typename... Types>
struct A : public B<Types>... {
using B<Types>::B...;
using B<Types>::operator=...;
}
вывод компилятора
<source>:8:8: error: expected nested-name-specifier before 'B'
8 | using B<Types>::operator=...;
|
^
Но этот код компилируется без ошибок
template<typename>
struct B {
};
template<typename... Types>
struct A : public B<Types>... {
using B<Types>::operator=...;
using B<Types>::B...;
};
Я не могу понять, почему это происходит.
Обновление
для g cc, наследование конструктора также нарушает код
template<typename T>
struct B {
void foo() {}
};
template<typename... Types>
struct A : public B<Types>... {
using B<Types>::B...;
void bar() {
(B<Types>::foo() , ...);
}
};