Я в аналогичной ситуации и воспроизвел предупреждение следующим образом:
#pragma warning(default : 4626)
struct A
{
A& operator=(const A&) = delete;
};
struct B : public A
{
//B& operator=(const B&) = delete;
void f(){
auto l = [](){ // <== compiler warning
/*body*/
};
}
};
int main(){
return 0;
}
Скомпилировано с /std:c++latest /W4
, в моем случае не имеет значения, если вы захватите это или нет.
ЕстьВы наследуете класс от другого класса с удаленным оператором =?Я избегаю этого предупреждения, явно удаляя оператор = в моем случае.Это предупреждение произошло в MVS 19 16.3.0 при компиляции с / latest.с / std: c ++ 17 такого предупреждения нет.
EDIT
это предупреждение также происходит, как только что-то, захваченное в lamdba, используется (перехвачено копиейили ссылка не имеет значения):
#pragma warning(default : 4626)
int main()
{
int foo;
auto bar = [&]() {
foo;
};
return 0;
}
<source>(8): warning C4626: 'main::<lambda_1>': assignment operator was implicitly defined as deleted
(с / std: c ++ latest / W4)