Код:Частные и конструктор по умолчанию в C++ 11 и НКУ
struct A
{
private:
A() = default; // Version 1.
};
struct B : public A
{};
struct C
{
private:
C() {}; // Version 2.
};
struct D : public C
{};
int main()
{
B b; // Compiles under g++ 4.7.2
D d; // Compilation error under g++ 4.7.2
}
И две ситуации (с GCC 4.7.2):
- Если я скомпилировать этот код (с версии 1 конструктора А), проблем нет.
- Если я использую второй конструктор, gcc говорит мне, что
D::D()
является закрытым.
Вопрос: если я использую конструкторы по умолчанию, почему проблемы исчезают? Если у A
есть частные конструкторы, другие классы никогда не смогут создавать экземпляры A
, даже не имеющие его производные классы, независимо от «нестандартности» реализации его конструктора.
Ни с 'line X' прокомментировал? –
@ Peregring-lk: Я обновил свой ответ –
Зарегистрировано как http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56429 –