使用默认参数继承构造函数:哪个编译器是正确的?

and*_*ras 2 c++ g++ visual-c++ c++11

在C++ 11中,您可以从基类继承所有构造函数.构造函数继承如何针对默认参数进行操作?

请考虑以下代码:

struct Base
{
    Base(int x, int y=0, int z=0)
    {

    }
};

struct Derived : public Base
{
    using Base::Base;
};

int main() {
    Base B(1,2);
    Derived D(2,2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这不能在MSVC13上编译,并出现以下错误:

 ..\constructor_test\main.cpp(16) : error C2660: 'Derived::Derived' : function does not take 2 arguments
Run Code Online (Sandbox Code Playgroud)

但是,它在GCC上运行正常(请参阅http://ideone.com/nNmXHo).所以我的问题是:

不应该生成一个,两个和三个参数的构造函数吗?哪个编译器在这里正确?MSVC13或GCC?如果GCC是正确的,MSVC是否有任何已知的解决方法(除了再次明确指定构造函数)?

小智 5

gcc编译器是正确的.

正如您所提到的,应该生成一个,两个和三个参数的构造函数.