# V2019. Cast should not remove 'volatile' qualifier from the type that is pointed to by a pointer or a reference.

This diagnostic rule was added at users' request.

The analyzer has detected the situation where the 'volatile' qualifier was removed. Accessing an object, which was declared with the 'volatile' qualifier, through a pointer/reference to a non-'volatile' type leads to undefined behavior.

Example of the code for which the analyzer will issue a warning:

    int foo(int &value)
    {
      while (value)
      {
        // do some stuff...
      }

      return 0;
    }

    int main()
    {
      volatile int value = 1;
      return foo((int &) value);
    }

Another example of the code for which the analyzer will issue a warning:

    #include <utility>

    int foo()
    {
      int x = 30;
      volatile int y = 203;

      using std::swap;
      swap(x, const_cast<int &>(y)); // <=

      return x;
    }