Рассмотрим следующий код:
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)
, нодля меня, в случае передачи параметров, это явно неправильно и источник ошибок.