Этот код работает:
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)? Или GCC справляется с этим правильно? Не определено ли это в стандарте C ++?