>
>
>
V2019. Cast should not remove 'volatile…


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;
}