[Bug libstdc++/52114] New: SFINAE out the rvalue iostream operators to give better error messages
b.r.longbons at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Feb 3 18:53:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52114
Bug #: 52114
Summary: SFINAE out the rvalue iostream operators to give
better error messages
Classification: Unclassified
Product: gcc
Version: 4.7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: b.r.longbons@gmail.com
Created attachment 26566
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26566
Use SFINAE in delayed return type to make sure there's an lvalue version
Currently, if there is no stream insertion/extraction operator defined for a
class, it tries to use the template that takes an rvalue istream or ostream and
anything on the right.
Actual Result:
error: cannot bind ‘std::ostream {aka std::basic_ostream<char>}’ lvalue to
‘std::basic_ostream<char>&&’
/usr/include/c++/4.6/ostream:581: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 = Foo]’
Expected Result:
error: no match for ‘operator<<’ in ‘std::cout << Foo()’
note: candidates are:
Note that this patch is not safe to apply to 4.6 because of bug 51878
More information about the Gcc-bugs
mailing list