https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66771
--- Comment #3 from H.J. Lu <hjl.tools at gmail dot com> --- [hjl@gnu-ivb-1 build_base_lnx32e-gcc.0000]$ cat foo.cc #include <iostream> char buf[300]; bool readLine(std::istream& m_input) { if (m_input.getline(buf, sizeof(buf)) == 0) return false; return true; } [hjl@gnu-ivb-1 build_base_lnx32e-gcc.0000]$ g++ -O2 -c foo.cc [hjl@gnu-ivb-1 build_base_lnx32e-gcc.0000]$ g++ -O2 -c foo.cc -std=c++11 foo.cc: In function \u2018bool readLine(std::istream&)\u2019: foo.cc:6:41: error: no match for \u2018operator==\u2019 (operand types are \u2018std::basic_istream<char>::__istream_type {aka std::basic_istream<char>}\u2019 and \u2018int\u2019) if (m_input.getline(buf, sizeof(buf)) == 0) ^ foo.cc:6:41: note: candidate: operator==(int, int) <built-in> foo.cc:6:41: note: no known conversion for argument 1 from \u2018std::basic_istream<char>::__istream_type {aka std::basic_istream<char>}\u2019 to \u2018int\u2019 In file included from /usr/include/c++/5.1.1/bits/locale_facets.h:48:0, from /usr/include/c++/5.1.1/bits/basic_ios.h:37, from /usr/include/c++/5.1.1/ios:44, from /usr/include/c++/5.1.1/ostream:38, from /usr/include/c++/5.1.1/iostream:39, from foo.cc:1: /usr/include/c++/5.1.1/bits/streambuf_iterator.h:204:5: note: candidate: template<class _CharT, class _Traits> bool std::operator==(const std::istreambuf_iterator<_CharT, _Traits>&, const std::istreambuf_iterator<_CharT, _Traits>&) operator==(const istreambuf_iterator<_CharT, _Traits>& __a, ^ /usr/include/c++/5.1.1/bits/streambuf_iterator.h:204:5: note: template argument deduction/substitution failed: ...