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)
, забыв о string
, и фактически имея в виду иметь i=0
?