This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
gcc-3.1 istream_iterator bug
- From: nbecker at hns dot com (Neal D. Becker)
- To: gcc-bugs at gcc dot gnu dot org
- Date: 26 Aug 2002 16:01:07 -0400
- Subject: gcc-3.1 istream_iterator bug
This simple program fails to compile with gcc-3.1:
-------------------------------
#include <iostream>
#include <iterator>
#include <vector>
#include <utility>
template<typename charT, typename traits, typename T1, typename T2>
inline std::basic_istream<charT,traits>& operator>> (std::basic_istream<charT,traits>& is, std::pair<T1,T2>& p) {
T1 t1;
T2 t2;
is >> t1 >> t2;
if (is)
p = std::pair<T1,T2> (t1, t2);
return is;
}
int main () {
std::vector<int> v;
typedef std::pair<double,double> pt;
std::copy (std::istream_iterator<pt> (std::cin), std::istream_iterator<pt> (), std::back_inserter (v));
}
-------------------------
Here's what happens:
g++3 -c bug.cc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.1/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --host=i386-redhat-linux --with-system-zlib
Thread model: posix
gcc version 3.1 20020604 (Red Hat Linux 7.3 3.1-5)
/usr/lib/gcc-lib/i386-redhat-linux/3.1/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=1 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ bug.cc -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase bug.cc -version -o /tmp/ccBHb9Ob.s
GNU CPP version 3.1 20020604 (Red Hat Linux 7.3 3.1-5) (cpplib) (i386 Linux/ELF)
GNU C++ version 3.1 20020604 (Red Hat Linux 7.3 3.1-5) (i386-redhat-linux)
compiled by GNU C version 3.1 20020604 (Red Hat Linux 7.3 3.1-5).
ignoring nonexistent directory "/usr/i386-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/g++-v3
/usr/include/g++-v3/i386-redhat-linux
/usr/include/g++-v3/backward
/usr/local/include
/usr/lib/gcc-lib/i386-redhat-linux/3.1/include
/usr/include
End of search list.
/usr/include/g++-v3/bits/stream_iterator.h: In member function `void
std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::_M_read() [with _Tp =
main()::pt, _CharT = char, _Traits = std::char_traits<char>, _Dist =
ptrdiff_t]':
/usr/include/g++-v3/bits/stream_iterator.h:60: instantiated from `std::istream_iterator<_Tp, _CharT, _Traits, _Dist>::istream_iterator(std::basic_istream<_CharT, _Traits>&) [with _Tp = main()::pt, _CharT = char, _Traits = std::char_traits<char>, _Dist = ptrdiff_t]'
bug.cc:21: instantiated from here
/usr/include/g++-v3/bits/stream_iterator.h:96: no match for `
std::basic_istream<char, std::char_traits<char> >& >> main()::pt&' operator
/usr/include/g++-v3/bits/istream.tcc:82: candidates are:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(std::basic_istream<_CharT,
_Traits>&(*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char,
_Traits = std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:91:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(std::basic_ios<_CharT,
_Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits
= std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:100:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(std::ios_base&(*)(std::ios_base&)) [with _CharT = char,
_Traits = std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:109:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(bool&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:136:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(short int&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:173:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(short unsigned int&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:200:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(int&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:237:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(unsigned int&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:264:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(long int&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:291:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(long unsigned int&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:319:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(long long int&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:346:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(long long unsigned int&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:374:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(float&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:401:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(double&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:428:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(long double&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:455:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(void*&) [with _CharT = char, _Traits =
std::char_traits<char>]
/usr/include/g++-v3/bits/istream.tcc:482:
std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
_Traits>::operator>>(std::basic_streambuf<_CharT, _Traits>*) [with _CharT =
char, _Traits = std::char_traits<char>]
/usr/include/g++-v3/istream:236: std::basic_istream<char,
_Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned
char&) [with _Traits = std::char_traits<char>]
/usr/include/g++-v3/istream:241: std::basic_istream<char,
_Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char&)
[with _Traits = std::char_traits<char>]
/usr/include/g++-v3/istream:250: std::basic_istream<char,
_Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned
char*) [with _Traits = std::char_traits<char>]
/usr/include/g++-v3/istream:255: std::basic_istream<char,
_Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char*)
[with _Traits = std::char_traits<char>]
/usr/include/g++-v3/bits/stl_algobase.h: In function `_OutputIter
std::__copy(_InputIter, _InputIter, _OutputIter, std::input_iterator_tag)
[with _InputIter = std::istream_iterator<main()::pt, char,
std::char_traits<char>, ptrdiff_t>, _OutputIter =
std::back_insert_iterator<std::vector<int, std::allocator<int> > >]':
/usr/include/g++-v3/bits/stl_algobase.h:260: instantiated from `_OutputIter std::__copy_aux2(_InputIter, _InputIter, _OutputIter, __false_type) [with _InputIter = std::istream_iterator<main()::pt, char, std::char_traits<char>, ptrdiff_t>, _OutputIter = std::back_insert_iterator<std::vector<int, std::allocator<int> > >]'
/usr/include/g++-v3/bits/stl_algobase.h:303: instantiated from `_OutputIter std::__copy_ni2(_InputIter, _InputIter, _OutputIter, __false_type) [with _InputIter = std::istream_iterator<main()::pt, char, std::char_traits<char>, ptrdiff_t>, _OutputIter = std::back_insert_iterator<std::vector<int, std::allocator<int> > >]'
/usr/include/g++-v3/bits/stl_algobase.h:323: instantiated from `_OutputIter std::__copy_ni1(_InputIter, _InputIter, _OutputIter, __false_type) [with _InputIter = std::istream_iterator<main()::pt, char, std::char_traits<char>, ptrdiff_t>, _OutputIter = std::back_insert_iterator<std::vector<int, std::allocator<int> > >]'
/usr/include/g++-v3/bits/stl_algobase.h:349: instantiated from `_OutputIter std::copy(_InputIter, _InputIter, _OutputIter) [with _InputIter = std::istream_iterator<main()::pt, char, std::char_traits<char>, ptrdiff_t>, _OutputIter = std::back_insert_iterator<std::vector<int, std::allocator<int> > >]'
bug.cc:21: instantiated from here
/usr/include/g++-v3/bits/stl_algobase.h:228: no match for `
std::back_insert_iterator<std::vector<int, std::allocator<int> > >& = const
std::pair<double, double>&' operator
/usr/include/g++-v3/bits/stl_iterator.h:355: candidates are:
std::back_insert_iterator<_Container>&
std::back_insert_iterator<_Container>::operator=(_Container::const_reference)
[with _Container = std::vector<int, std::allocator<int> >]
/usr/include/g++-v3/bits/stl_iterator.h:330:
std::back_insert_iterator<std::vector<int, std::allocator<int> > >&
std::back_insert_iterator<std::vector<int, std::allocator<int> >
>::operator=(const std::back_insert_iterator<std::vector<int,
std::allocator<int> > >&)
Compilation exited abnormally with code 1 at Mon Aug 26 15:59:43