继承第二级基类构造函数:silent error

The*_*Vee 8 c++ inheritance gcc constructor

我今天遇到了一个非常讨厌的错误,这是一个MWE:

#include <iostream>

class X {

public: 
  X() { std::cout << "Default" << std::endl; }
  X(int a) { std::cout << a << std::endl; }
};

class Y : public X { };

class Z : public Y {
  using X::X;
};

int main() {
  Z instance{3};
}
Run Code Online (Sandbox Code Playgroud)

与我的期望相反," Default"被打印出来.不可否认,代码是错误的,因为继承的构造函数Z尝试初始化X而不指定如何构造Y(*).但是,编译器不应该抱怨吗?默认构造函数Y(以及随后X)调用后的基本原理是什么,完全默默地忽略我的参数3?这是在标准的某处记录的吗?或者它是我编译器中的错误?

我的环境是gcc version 6.2.1 20160916 (Red Hat 6.2.1-2).即使使用,也不会生成编译器警告-Weffc++ -Wall -Wextra -pedantic.

n. *_* m. 2

这是一个 g++ bug,代码无效。只能继承直接基类的构造函数:

\n\n
\n

[namespace.udecl] \xc2\xa73 如果这样的using 声明命名构造函数,则嵌套名称说明符应命名所定义的类的直接基类

\n
\n