Compiler switch to disable const_cast semantics in c-style casts?
Asked Answered
W

1

6

Recently I stumbled over code such as this:

void foo(const Bar* b) {
  ...
  takes_nonconst_param_fn((Bar*)b);
  ...

Obviously, the developer didn't know what he was doing, but if the compiler hadn't silently accepted the c-style-cast and at least required a proper const_cast, he may have though twice before committing this.

So this got me thinking, do any modern compilers have a switch to prevent const_castsemantics for c-style-casts?

It's simply not practical to prevent all occurrences of c-style-casts and it's a necessary evil to allow their static_ and reinterpret_ semantics (if only for some library code), but my impression is, that legitimate usage of c-style-casts to cast away constness is very rare in C++ code bases, so maybe it should be possible to disable it altogether?

Wyatan answered 13/4, 2011 at 14:21 Comment(3)
Does it make any difference if you declare foo as 'void foo(const Bar* b) const'?Jentoft
@James: why do you expect that to affect how explicit casts work? If foo is a member function, then that would make the object members const within the function; if not, then that would be an error.Amity
Actually I wish I could disable all but their static_cast form.Priddy
A
7

GCC has the option -Wcast-qual to warn when a C-style cast removes a type qualifier. Combined with -Werror, you can prevent it completely if you want.

Amity answered 13/4, 2011 at 14:49 Comment(2)
Also consider -Wold-style-cast for all old casts.Priddy
Nice: Another flag I need to add to my list of needed flags.Strategic

© 2022 - 2024 — McMap. All rights reserved.