This diagnostic rule is based on the software development guidelines developed by AUTOSAR (AUTomotive Open System ARchitecture).
Removing the 'const' / 'volatile' qualifier can lead to undefined behavior.
The compiler can optimize the code if undefined behavior occurs. In the code below, for example, the compiler can make the loop infinite:
inline int foo(bool &flag) { while (flag) { // do some stuff... } return 0; } int main() { volatile bool flag = true; return foo(const_cast<bool &>(flag)); }
Another example of non-compliant code:
void my_swap(const int *x, volatile int *y) { auto _x = const_cast<int*>(x); auto _y = const_cast<int*>(y); swap(_x, _y); } void foo() { const int x = 30; volatile int y = 203; my_swap(&x, &y); // <= }
This diagnostic is classified as:
|