В 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;
}
Это не компилируется на MSVC13, со следующей ошибкой:
..\constructor_test\main.cpp(16) : error C2660: 'Derived::Derived' : function does not take 2 arguments
Однако, это работает отлично на НКУ (см http://ideone.com/nNmXHo). Так что мои вопросы:
Не следует ли создавать конструкторы для одного, двух и трех аргументов? Какой компилятор здесь правильно? MSVC13 или GCC? Если GCC верен, существует ли какое-либо известное решение для MSVC (кроме явного указания конструкторов снова)?
, пожалуйста, ознакомьтесь с этим, http://msdn.microsoft.com/en-us/library/hh567368.aspx#corelanguagetable, где четко указано, что визуальная студия его не поддерживает (пока) –
Ах, спасибо ! Я только искал специальный случай наследования конструктора с аргументами по умолчанию и пропустил тот факт, что даже базовое наследование не поддерживается. Если вы ответили бы, я бы принял это. – anderas