Этот код работает:
std::ifstream f(mapFilename.c_str());
std::string s = std::string(std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>());
ParseGameState(s);
Таким образом, mapFilename
является std::string
и void ParseGameState(const std::string&);
.
И это не так:
std::ifstream f(mapFilename.c_str());
std::string s(std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>());
ParseGameState(s);
Это ошибка:
game.cpp: In member function ‘int Game::LoadMapFromFile(const std::string&)’:
game.cpp:423: error: no matching function for call to ‘ParseGameState(std::string (&)(std::istreambuf_iterator<char, std::char_traits<char> >, std::istreambuf_iterator<char, std::char_traits<char> > (*)()))’
game.cpp:363: note: candidates are: ParseGameState(const std::string&)
Так кажется, что он распознает s
как объявление функции, а не объявление переменной в этом случае.
Почему? Это ошибка в GCC 4.2.1 (Apple build)? Или GCC правильно справляется? Это undefined в стандарте С++?