http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58713
Bug ID: 58713 Summary: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ Product: gcc Version: 4.8.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: ali.baharev at gmail dot com #include <iostream> struct A { }; int main() { A a; std::cout << a; } ----- g++ 4.8.1, 64 bit with -std=c++11 gives the correct error message: main.cpp:7:15: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘A’) std::cout << a; ^ However, 4.8.1, 32 bit or 4.7.2, 64 bit gives: prog.cpp:7:18: error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to ‘std::basic_ostream<char>&&’ std::cout << a; ^ In file included from /usr/include/c++/4.8/iostream:39:0, from prog.cpp:1: /usr/include/c++/4.8/ostream:602:5: error: initializing argument 1 of ‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = A]’ operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x) ^ Could this rather confusing error message be improved? Why do the 32 and 64 bit versions behave differently?