Рассмотрим следующий код:
void foo(bool parameter) {
std::cout << parameter << "\n";
}
int main() {
foo("const char *argument");
}
Я хочу, чтобы компилятор выдавал предупреждение при передаче const char*
вместо bool
в качестве параметра функции foo
.
Но GCC неявно преобразует его. Я пробовал -Wall
, -Wextra
и -Wpedantic
, но ни один из них не выдает предупреждение. Есть ли флаг, который может перехватить такое неявное преобразование (недопустимый тип параметра)?
Не обращайте внимания на тот факт, что функция имеет аргумент типа bool
, который некоторые могут воспринимать как плохой стиль кода. Я не могу изменить эту часть.
Стандарт только упоминает, что такое неявное преобразование произойдет:
Значение целочисленного типа с перечислением с плавающей точкой, с незаданной областью, указатель и указатель на член может быть преобразовано в значение типа bool.
Я знаю, что такое поведение очень удобно в операторах if (ptr)
, но для меня, в случае передачи параметров, оно явно неверно и является источником ошибок.