<分区>
请看下面的代码:
struct base {};
template <class T>
struct derived : T {
using base_type = T;
using base_type::T;
};
int main()
{
derived<base> x;
}
GCC 接受此代码,但 Clang 和 MSVC 拒绝它。谁是对的,为什么?
<分区>
请看下面的代码:
struct base {};
template <class T>
struct derived : T {
using base_type = T;
using base_type::T;
};
int main()
{
derived<base> x;
}
GCC 接受此代码,但 Clang 和 MSVC 拒绝它。谁是对的,为什么?
最佳答案
using base_type::T;
是一个 declaration , 而 using
是一个 alias .这在标准中有点边缘情况,因为真正的问题归结为 T
在哪里扩展。 C++ 委员会被引用 here就像说他们不打算使该语法有效,因此 LLVM 明确删除了它。看起来标准中没有任何内容阻止它,因此 gcc 在允许转换方面并没有错。谁是“正确的”取决于你。
关于c++ - 在模板派生类中继承具有类型别名的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51640562/