void foo (const std::string &s) {}
int main() {
foo(0); //compiles, but invariably causes runtime error
return 0;
}
Компилятор (g ++ 4.4) очевидно интерпретирует 0
как char * NULL
и создает s
путем вызова string :: string (const char *, const Allocator & a = Allocator ())
. Что, конечно, бесполезно, потому что указатель NULL
не является допустимым указателем на c-строку.Это неверное толкование не возникает, когда я пытаюсь вызвать foo (1)
, это помогает вывести ошибку времени компиляции.
Есть ли возможность получить такую ошибку или предупреждение во время компиляции, когда я случайно вызвать функцию вроде
void bar(const std::string &s, int i=1);
с bar (0)
, забыв о строке
, и на самом деле имея в виду, что i = 0
?