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
?