Этот код не компилируется с GCC 4.7.0:Удалены результаты конструктор копирования в удаленных конструктор по умолчанию
class Base
{
public:
Base(const Base&) = delete;
};
class Derived : Base
{
public:
Derived(int i) : m_i(i) {}
int m_i;
};
Ошибка:
c.cpp: In constructor ‘Derived::Derived(int)’:
c.cpp:10:24: error: no matching function for call to ‘Base::Base()’
c.cpp:10:24: note: candidate is:
c.cpp:4:2: note: Base::Base(const Base&) <deleted>
c.cpp:4:2: note: candidate expects 1 argument, 0 provided
Другими словами, компилятор не генерирует конструктор по умолчанию для базового класса и вместо этого пытается вызвать удалённый конструктор копирования как единственную доступную перегрузку.
Это нормальное поведение?
Да, поскольку если какой-либо конструктор * объявлен пользователем *, конструктор по умолчанию подавляется. – Xeo
Почему удаление конструктора считается объявлением конструктора? Это счетчик интуитивно понятен. – kounoupis