这段代码由gcc编译时出现错误
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...;
};
我不明白为什么会出现这种情况。
更新
对于gcc而言,构造函数继承也会破坏代码。
template<typename T>
struct B {
void foo() {}
};
template<typename... Types>
struct A : public B<Types>... {
using B<Types>::B...;
void bar() {
(B<Types>::foo() , ...);
}
};
gcc
还是g++
? - JohnFilleaug++
看起来一直到 9.3 版本甚至是 trunk 版本都在抱怨。 - Ted Lyngmo