Я не понимаю, почему вы не можете скомпилировать класс, который имеет как элемент (не стандартный по умолчанию) с инициализатором скобки или равным, так и унаследованным конструктором. г ++ говорит:Наследующие конструкторы и инициализаторы с равными равными
test.cpp:22:15: error: use of deleted function ‘Derived::Derived(float)’
Derived d(1.2f);test.cpp:16:13: note: ‘Derived::Derived(float)’ is implicitly deleted
because the default definition would be ill-formed:
using Base::Base;test.cpp:16:13: error: no matching function for call to ‘NoDefCTor::NoDefCTor()’
test.cpp:5:1: note: candidate:
NoDefCTor::NoDefCTor(int) NoDefCTor(int) {}
код, который не может скомпилировать (при г ++ 5.1):
struct NoDefCTor
{
NoDefCTor(int) {}
};
struct Base
{
Base(float) {}
};
struct Derived : Base
{
using Base::Base;
NoDefCTor n2{ 4 };
};
int main()
{
Derived d(1.2f);
}
код, который компилирует, но никогда не использует конструктор NoDefCTor
«s по умолчанию (несмотря на то, видимо, в ней нуждаются!):
struct NoDefCTor
{
NoDefCTor(int) {}
NoDefCTor() = default;
};
struct Base
{
Base(float) {}
};
struct Derived : Base
{
using Base::Base;
NoDefCTor n2{ 4 };
};
int main()
{
Derived d(1.2f);
}
Мне не очень нравится идея создания конструктора по умолчанию, когда он мне не нужен. На стороне примечания обе версии скомпилируют (и ведут себя) очень хорошо на MSVC14.
Эта ошибка gcc? https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62310 – dyp
Или это ошибка gcc? https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67054 – dyp
@dyp спасибо. Это вторая ошибка. Я думал, что это язык. – maxbc