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