For this test case: # include <fstream> # include <istream>
using namespace std; ifstream x; ifstream& y = x; int main(int argc, char** argv) { y = x; return 0; } current mainline g++ produces: In file included from /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/ios:39, from /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/istream:40, from /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/fstream:40, from foo.cc:1: /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/bits/ios_base.h: In member function std::basic_ios<char>& std::basic_ios<char>::operator=(const std::basic_ios<char>&): /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/bits/ios_base.h:793: error: std::ios_base& std::ios_base::operator=(const std::ios_base&) is private /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/iosfwd:47: error: within this context /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/iosfwd: In member function std::basic_istream<char>& std::basic_istream<char>::operator=(const std::basic_istream<char>&): /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/iosfwd:53: note: synthesized method std::basic_ios<char>& std::basic_ios<char>::operator=(const std::basic_ios<char>&) first required here /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/iosfwd: In member function std::basic_ifstream<char>& std::basic_ifstream<char>::operator=(const std::basic_ifstream<char>&): /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/iosfwd:81: note: synthesized method std::basic_istream<char>& std::basic_istream<char>::operator=(const std::basic_istream<char>&) first required here /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/streambuf: In member function std::basic_filebuf<char>& std::basic_filebuf<char>::operator=(const std::basic_filebuf<char>&): /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/streambuf:778: error: std::basic_streambuf<_CharT, _Traits>::__streambuf_type& std::basic_streambuf<_CharT, _Traits>::operator=(const std::basic_streambuf<_CharT, _Traits>::__streambuf_type&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_streambuf<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>] is private /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/iosfwd:78: error: within this context /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/iosfwd: In member function std::basic_ifstream<char>& std::basic_ifstream<char>::operator=(const std::basic_ifstream<char>&): /home/iant/gcc/install/lib/gcc/i686-pc-linux-gnu/4.5.0/../../../../include/c++/4.5.0/iosfwd:81: note: synthesized method std::basic_filebuf<char>& std::basic_filebuf<char>::operator=(const std::basic_filebuf<char>&) first required here foo.cc: In function int main(int, char**): foo.cc:10: note: synthesized method std::basic_ifstream<char>& std::basic_ifstream<char>::operator=(const std::basic_ifstream<char>&) first required here Walking back from the point of error to the point of use can be helpful in some scenarios. However, for an example like this one it is unhelpful and serves to disguise the real problem. I think we can use the walkback more intelligently and say something like: foo.cc:10: error: cannot synthesize method std::basic_ifstream<char>& std::basic_ifstream<char>::operator=(const std::basic_ifstream<char>&) foo.cc:10: note: because std::ios_base& std::ios_base::operator=(const std::ios_base&) is private foo.cc:10: note: for details use -fvery-long-error-messages -- Summary: C++ diagnostic for private operator= is voluminous and unhelpful Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ian at airs dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39728