Сообщение warning C5267: definition of implicit copy constructor for ' от 05.10.2023 19:10
Изменено 05.10.2023 21:09 Sm0ke
warning C5267: definition of implicit copy constructor for '
Есть проект, который писал не я
Компилирую его на msvc 2022 community
Параметры компиляции:
Получаю warning:
Минимальный пример, чтобы воспроизвести warning: https://godbolt.org/z/1j8Govn31
Чтобы устранить warning я прислал автору проекта фикс патч, где определил конструкторы в интерфейсе (базовый класс)
(раскоментировать 3 строчки)
На что он мне ответил:
Так мой фикс — норм решение, или как лучше сделать?
Вроде логично, чтобы в наследнике были конструкторы мув и копи по умолчанию — они должны быть таковыми и в базе.
p/s: gcc компилирует это без ворнингов и без явнно заданных конструкторов в интерфейсе https://godbolt.org/z/reTeYocYT
Компилирую его на msvc 2022 community
Параметры компиляции:
/Wall /wd"4738" /wd"4868" /wd"4710" /wd"4711" /wd"4505" /wd"4514" /wd"4820" /wd"4464" /wd"4435" /wd"5045" /wd"5027" /wd"4626" /wd"4866"
Получаю warning:
warning C5267: definition of implicit copy constructor for 'i_base' is deprecated because it has a user-provided destructor
* (фактическое имя класса тут заменил на i_base)
Минимальный пример, чтобы воспроизвести warning: https://godbolt.org/z/1j8Govn31
#include <iostream>
struct i_base
{
//i_base() = default;
//i_base(const i_base &) = default;
//i_base(i_base &&) = default;
virtual ~i_base() = default;
virtual void go() = 0;
};
struct impl : public i_base
{
void go() override {}
};
impl make()
{
impl ret;
return ret;
}
int main ()
{
impl v = make();
return 0;
}
Чтобы устранить warning я прислал автору проекта фикс патч, где определил конструкторы в интерфейсе (базовый класс)
(раскоментировать 3 строчки)
На что он мне ответил:
я что-то не понял, а нехера в интерфейсе с чисто виртуальными методами конструкторы?
Так мой фикс — норм решение, или как лучше сделать?
Вроде логично, чтобы в наследнике были конструкторы мув и копи по умолчанию — они должны быть таковыми и в базе.
p/s: gcc компилирует это без ворнингов и без явнно заданных конструкторов в интерфейсе https://godbolt.org/z/reTeYocYT
warning C5267: definition of implicit copy constructor for '
Есть проект, который писал не я
Компилирую его на msvc 2022 community
Параметры компиляции:
Получаю warning:
Минимальный пример, чтобы воспроизвести warning: https://godbolt.org/z/1j8Govn31
Чтобы устранить warning я прислал автору проекта фикс патч, где определил конструкторы в интерфейсе (базовый класс)
(раскоментировать 3 строчки)
На что он мне ответил:
Так мой фикс — норм решение, или как лучше сделать?
Вроде логично, чтобы в наследнике были конструкторы мув и копи по умолчанию — они должны быть таковыми и в базе.
p/s: gcc компилирует это без ворнингов и без явнно заданных конструкторов в интерфейсе https://godbolt.org/z/reTeYocYT
Компилирую его на msvc 2022 community
Параметры компиляции:
/Wall /wd"4738" /wd"4868" /wd"4710" /wd"4711" /wd"4505" /wd"4514" /wd"4820" /wd"4464" /wd"4435" /wd"5045" /wd"5027" /wd"4626" /wd"4866"
Получаю warning:
warning C5267: definition of implicit copy constructor for 'i_base' is deprecated because it has a user-provided destructor
* (фактическое имя класса тут заменил на i_base)
Минимальный пример, чтобы воспроизвести warning: https://godbolt.org/z/1j8Govn31
#include <iostream>
struct i_base
{
//i_base() = default;
//i_base(const i_base &) = default;
//i_base(i_base &&) = default;
virtual ~i_base() = default;
virtual void go() = 0;
};
struct impl : public i_base
{
void go() override {}
};
impl make()
{
impl ret;
return ret;
}
int main ()
{
impl v = make();
return 0;
}
Чтобы устранить warning я прислал автору проекта фикс патч, где определил конструкторы в интерфейсе (базовый класс)
(раскоментировать 3 строчки)
На что он мне ответил:
а зачем в интерфейсе с чисто виртуальными методами конструкторы?
Так мой фикс — норм решение, или как лучше сделать?
Вроде логично, чтобы в наследнике были конструкторы мув и копи по умолчанию — они должны быть таковыми и в базе.
p/s: gcc компилирует это без ворнингов и без явнно заданных конструкторов в интерфейсе https://godbolt.org/z/reTeYocYT