Avoid or warn on implicit conversion from const char* to bool in GCC

  • A+
Category:Languages

Consider the following code:

void foo(bool parameter) {     std::cout << parameter << "/n"; }  int main() {     foo("const char *argument"); } 

I want the compiler to raise a warning when passing const char* instead of bool as a parameter to function foo.

But GCC implicitly converts it. I tried -Wall, -Wextra, and -Wpedantic, but none of these issue a warning. Is there a flag that could catch such an implicit conversion (invalid parameter type)?

Ignore the fact that the function has an argument of type bool, which some may see as bad code style. I can't refactor that part.

The standard just mentions such an implicit conversion will occur:

A prvalue of integral, floating-point, unscoped enumeration, pointer, and pointer-to-member types can be converted to a prvalue of type bool.

I know such behavior is very convenient in if (ptr) statements, but for me, in the case of passing parameters, it is clearly wrong and a source of bugs.

 


You could declare an overload of foo for pointers as deleted:

template <class T> void foo(T*) = delete; 

Or better yet, as @Ted comments, simply declare a vanilla overload to not compile any implicit conversions:

template <class T> void foo(T) = delete; 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: