Почему я не могу использовать временный ifstream в C++ 11?

Почему я должен объявить именованную переменную file в следующем коде?

#include <iostream>
#include <fstream>

using namespace std;

int main(int const argc, char const * const * const argv) {
        string head1;
        ifstream file {argv[1]};
        getline (file, head1);
        cout << head1 << endl;
}

Если я попробую

getline (ifstream(argv[1]), head1)

я получил no known conversion for argument 1 from ‘std::ifstream {aka std::basic_ifstream<char>}’ to ‘std::basic_istream<char>&’ или аналогичные (gcc 4.6, 4.8 или clang 3.3).

Я не понимаю, потому что согласно cplusplus.com есть определение

istream& getline (istream&& is, string& str);

и я не понимаю, почему это преобразование не может быть сделано (временное можно использовать как rvalue, и istream это базовый класс ifstream).

0 ответов

Другие вопросы по тегам