Our website uses cookies to enhance your browsing experience.
Accept
to the top
>
>
>
V2019. Cast should not remove...
menu mobile close menu
Additional information
toggle menu Contents

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

Nov 02 2022

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