3
Мне было сложно сформулировать правильный заголовок.Конструктор пытается вызвать конструктор копирования, виртуальное наследование
struct Base
{
Base(int) {}
virtual ~Base()=default;
};
struct Derived: virtual public Base
{
Derived(float, int): Base{1} {}
Derived(Derived const&)=delete;
~Derived()=default;
};
struct Comp: private Derived
{
Comp(): Base{1}, Derived{1.0f, 1} {}
};
Это дает ошибку при компиляции:
x.cc: In constructor ‘Comp::Comp()’:
x.cc:16:34: error: use of deleted function ‘Derived::Derived(const Derived&)’
Comp(): Base{1}, Derived{1.0f, 1} {}
^
x.cc:10:2: note: declared here
Derived(Derived const&)=delete;
^~~~~~~
Почему конструктор копирования запрашиваться здесь? Проблема исчезает, когда я избавляюсь от виртуального наследования (и, соответственно, вызов Base(int)
в списке инициализаторов Comp
).
Это на gcc version 6.2.1 20161124 (Debian 6.2.1-5)
.
@juanchopanza Извините, было немного непоследовательно, потому что я упростил пример дальше. – TFM
Опубликовать реальный [mcve]. Включая компилятор и версию, если код действительно не скомпилирован. – juanchopanza
Что вы ожидаете от 'Base {1}' в конструкторе 'Comp', учитывая, что' Comp' не является производным от 'Base'? –