Как предотвратить проблемы, связанные с созданием std :: string из `0`?

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 ?

19
задан leftaroundabout 26 June 2011 в 13:59
поделиться