Почему я не могу использовать временный 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
).