V2019. Cast should not remove 'volatile' qualifier from the type that is pointed to by a pointer or a reference.
Данное диагностическое правило добавлено по просьбе пользователей.
Анализатор обнаружил ситуацию с удалением 'volatile'-квалификатора. Доступ к объекту, объявленному с квалификатором 'volatile', через указатель/ссылку на не-'volatile' тип ведет к неопределенному поведению.
Пример кода, на который анализатор выдаст предупреждение:
int foo(int &value)
{
while (value)
{
// do some stuff...
}
return 0;
}
int main()
{
volatile int value = 1;
return foo((int &) value);
}
Другой пример кода, на который анализатор выдаст предупреждение:
#include <utility>
int foo()
{
int x = 30;
volatile int y = 203;
using std::swap;
swap(x, const_cast<int &>(y)); // <=
return x;
}