Я пробовал код ниже на VS2017 (версия 15.9) и предварительный просмотр VS2019 - это ложный положительный результат?
class Base {};
class Derived1 : public virtual Base {}; // to avoid diamond pattern in real code
class Derived2 : public Base {};
struct S1 {
int i;
void(Derived1::*func)(); // warning C4121 - see below for full text
};
struct S2 {
int i;
void(Derived2::*func)(); // no warning
};
int main()
{
}
r:\cpp2019\cpp2019\cpp2019.cpp(9) : warning C4121 : 'S1' : alignment of a member was sensitive to packing
Я сделал код как можно более простым (очевидно, это не настоящий производственный код). В производственном коде (огромная кодовая база) предупреждение возникает из-за итерации по карте с использованием цикла for на основе диапазона. Переменная цикла , конечно, std::pair<keytype, valuetype>
, тип значения похож на func
в struct S1
.
Рабочий код прекрасно скомпилирован в VS2015, но теперь, когда VS2017 и языковой стандарт установлены на C ++ 17, я получаю это предупреждение.