I've done some reseach like:
- Overloading operator<<: cannot bind lvalue to ‘std::basic_ostream&&’
- Overloading operator<<: cannot bind ‘std::basic_ostream’ lvalue to ‘std::basic_ostream&&’
- error: cannot bind ‘std::basic_ostream’ lvalue to ‘std::basic_ostream&&’
Tell me if I misunderstood some.
I was trying to input std::pair from a file and I wanted to use std::istream_iterator >
Here comes the code:
std::ifstream in("file.in"); std::map<int, int> pp; pp.insert((std::istream_iterator<std::pair<int, int> >(in)), std::istream_iterator<std::pair<int, int> >());
I did the overloading as following:
std::istream & operator>>(std::istream & in, std::pair<int, int> & pa) { in >> pa.first >> pa.second; return in; } std::istream & operator>>(std::istream && in, std::pair<int, int> & pa) { in >> pa.first >> pa.second; return in; }
Here's the Error:
In file included from /usr/include/c++/4.8/iterator:66:0, from No_12.cpp:7: /usr/include/c++/4.8/bits/stream_iterator.h: In instantiation of ‘void std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::_M_read() [with _Tp = std::pair<int, int>; _CharT = char; _Traits = std::char_traits<char>; _Dist = long int]’: /usr/include/c++/4.8/bits/stream_iterator.h:70:17: required from ‘std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_iterator(std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_type&) [with _Tp = std::pair<int, int>; _CharT = char; _Traits = std::char_traits<char>; _Dist = long int; std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_type = std::basic_istream<char>]’ No_12.cpp:23:59: required from here /usr/include/c++/4.8/bits/stream_iterator.h:121:17: error: cannot bind ‘std::istream_iterator<std::pair<int, int> >::istream_type {aka std::basic_istream<char>}’ lvalue to ‘std::basic_istream<char>&&’ *_M_stream >> _M_value; ^ In file included from /usr/include/c++/4.8/iostream:40:0, from /files/Nutstore/000/CPPWorkSpace/SHUCourse/DataStructures/BinarySearchTree/20130514/src/BinarySearchTree.hpp:6, from /files/Nutstore/000/CPPWorkSpace/SHUCourse/DataStructures/BinarySearchTree/20130514/BinarySearchTree:3, from No_12.cpp:1: /usr/include/c++/4.8/istream:872:5: error: initializing argument 1 of ‘std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&&, _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = std::pair<int, int>]’ operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
I don't know what I can do now... Hope that someone can give me some advice. Thanks.