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