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.
std::string
and another which acceptsbool
instead, guess which one is chosen for"const char *argument"
. (Spoiler alert: yes the second - and it drove me crazy until I got a clue.) ;-) - Scheff's Catbool
parameter would be bad coding-style.. - 463035818_is_not_a_numberbool
parameter never has a single responsibility. Uncle Bob has many strong opinions about coding though. - YksisarvinenfooTrue
and afooFalse
instead? Hum, maybe i could agree in some cases, but not in general, though if Bob said so there must be some truth to it - 463035818_is_not_a_number