c++ - 在模板派生类中继承具有类型别名的构造函数

标签 c++ c++11 language-lawyer inheriting-constructors

<分区>

请看下面的代码:

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/

相关文章:

c++ - 在成员函数尾随返回类型中使用 this 和属性?

c++ - 在没有编译器警告的情况下移动常量对象

C++ - 在具有非类型模板参数的模板化类上专门化函数模板

c++ - C++ 中的空传播运算符

sockets - C++ - 如何从 struct sockaddr 获取 IP 和端口

c++ - 如果没有显式限定名称,如何调用纯虚函数?

c - 设置为 CHAR_MAX 的字符值是否保证环绕到 CHAR_MIN?

java - 匿名类可以完全不可变吗?

c++ - Eclipse 和命令行参数中的引号?

C++ 拉取信息并循环显示