функция против объявления переменной в C ++

Этот код работает:

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 ++?

12
задан Albert 12 September 2010 в 15:38
поделиться