This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/26512] New: g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: "olaf dot dietsche at gfa-net dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Mar 2006 14:33:16 -0000
- Subject: [Bug c++/26512] New: g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
g++ doesn't recognize a user-defined
operator<<(ostream, const pair<int, double> &)
although it recognizes
struct A {};
operator<<(ostream, const pair<int, A> &)
Regards, Olaf.
$ cat gccbug.cpp
#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>
typedef std::map<int, double> M;
extern std::ostream &operator <<(std::ostream &f, const M::value_type &p);
void f()
{
M m;
std::copy(m.begin(), m.end(),
std::ostream_iterator<M::value_type>(std::cout));
}
This one compiles without problems:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>
struct A {
double d;
};
typedef std::map<int, A> M;
extern std::ostream &operator <<(std::ostream &f, const M::value_type &p);
void f()
{
M m;
std::copy(m.begin(), m.end(),
std::ostream_iterator<M::value_type>(std::cout));
}
Putting the operator<<() in namespace std, cirucmvents the compile error too:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <map>
typedef std::map<int, double> M;
namespace std {
extern std::ostream &operator <<(std::ostream &f, const M::value_type &p);
};
void f()
{
M m;
std::copy(m.begin(), m.end(),
std::ostream_iterator<M::value_type>(std::cout));
}
And here is the output of the g++ call:
$ d:/programme/mingw/bin/g++ -v -c -Wall -save-temps gccbug.cpp
Reading specs from
d:/programme/mingw/bin/../lib/gcc/i686-pc-mingw32/4.0.2/specs
Target: i686-pc-mingw32
Configured with: ../gcc-4.0.2/configure --with-gcc --prefix=/mingw
--enable-threads --disable-nls --enable-languages=c,c++
--disable-win32-registry --disable-shared --enable-sjlj-exceptions --without-x
--enable-libstdcxx-debug
Thread model: win32
gcc version 4.0.2
d:/programme/mingw/bin/../libexec/gcc/i686-pc-mingw32/4.0.2/cc1plus.exe -E
-quiet -v -iprefix d:\programme\mingw\bin\../lib/gcc/i686-pc-mingw32/4.0.2/
gccbug.cpp -mtune=pentiumpro -Wall -fpch-preprocess -o gccbug.ii
ignoring nonexistent directory "/mingw/include"
ignoring nonexistent directory "d:/programme/mingw/i686-pc-mingw32/include"
ignoring nonexistent directory "/mingw/include"
#include "..." search starts here:
#include <...> search starts here:
d:/programme/mingw/bin/../lib/gcc/i686-pc-mingw32/4.0.2/include
d:/programme/mingw/include/c++/4.0.2
d:/programme/mingw/include/c++/4.0.2/i686-pc-mingw32
d:/programme/mingw/include/c++/4.0.2/backward
d:/programme/mingw/include
d:/programme/mingw/lib/gcc/i686-pc-mingw32/4.0.2/include
End of search list.
d:/programme/mingw/bin/../libexec/gcc/i686-pc-mingw32/4.0.2/cc1plus.exe
-fpreprocessed gccbug.ii -quiet -dumpbase gccbug.cpp -mtune=pentiumpro -auxbase
gccbug -Wall -version -o gccbug.s
GNU C++ version 4.0.2 (i686-pc-mingw32)
compiled by GNU C version 4.0.2.
GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=129918
d:/programme/mingw/include/c++/4.0.2/bits/stream_iterator.h: In member function
'std::ostream_iterator<_Tp, _CharT, _Traits>& std::ostream_iterator<_Tp,
_CharT, _Traits>::operator=(const _Tp&) [with _Tp = std::pair<const int,
double>, _CharT = char, _Traits = std::char_traits<char>]':
d:/programme/mingw/include/c++/4.0.2/bits/stl_algobase.h:270: instantiated
from 'static _OI std::__copy<<anonymous>, <template-parameter-1-2> >::copy(_II,
_II, _OI) [with _II = std::_Rb_tree_iterator<std::pair<const int, double> >,
_OI = std::ostream_iterator<std::pair<const int, double>, char,
std::char_traits<char> >, bool <anonymous> = false, <template-parameter-1-2> =
std::bidirectional_iterator_tag]'
d:/programme/mingw/include/c++/4.0.2/bits/stl_algobase.h:317: instantiated
from '_OI std::__copy_aux(_II, _II, _OI) [with _II =
std::_Rb_tree_iterator<std::pair<const int, double> >, _OI =
std::ostream_iterator<std::pair<const int, double>, char,
std::char_traits<char> >]'
d:/programme/mingw/include/c++/4.0.2/bits/stl_algobase.h:326: instantiated
from 'static _OI std::__copy_normal<<anonymous>, <anonymous> >::copy_n(_II,
_II, _OI) [with _II = std::_Rb_tree_iterator<std::pair<const int, double> >,
_OI = std::ostream_iterator<std::pair<const int, double>, char,
std::char_traits<char> >, bool <anonymous> = false, bool <anonymous> = false]'
d:/programme/mingw/include/c++/4.0.2/bits/stl_algobase.h:387: instantiated
from '_OutputIterator std::copy(_InputIterator, _InputIterator,
_OutputIterator) [with _InputIterator = std::_Rb_tree_iterator<std::pair<const
int, double> >, _OutputIterator = std::ostream_iterator<std::pair<const int,
double>, char, std::char_traits<char> >]'
gccbug.cpp:12: instantiated from here
d:/programme/mingw/include/c++/4.0.2/bits/stream_iterator.h:196: error: no
match for 'operator<<' in '*((std::ostream_iterator<std::pair<const int,
double>, char, std::char_traits<char>
>*)this)->std::ostream_iterator<std::pair<const int, double>, char,
std::char_traits<char> >::_M_stream << __value'
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:67: note: candidates are:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_ostream<_CharT, _Traits>&
(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:78: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_ios<_CharT, _Traits>&
(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:90: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char,
_Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:125: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long int) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:159: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:102: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(bool) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:176: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(short int) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:187: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:191: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(int) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:202: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:183: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long long int) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:218: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:242: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(double) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:217: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(float) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:265: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(long double) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:288: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(const void*) [with _CharT = char, _Traits =
std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:311: note:
std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
_Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT =
char, _Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:447: note:
std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT,
_Traits>&, char) [with _CharT = char, _Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:509: note:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, char) [with _Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:458: note:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, signed char) [with _Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:463: note:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, unsigned char) [with _Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:571: note:
std::basic_ostream<_CharT, _Traits>&
std::operator<<(std::basic_ostream<_CharT, _Traits>&, const char*) [with _CharT
= char, _Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/bits/ostream.tcc:616: note:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, const char*) [with _Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:497: note:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, const signed char*) [with _Traits = std::char_traits<char>]
d:/programme/mingw/include/c++/4.0.2/ostream:502: note:
std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char,
_Traits>&, const unsigned char*) [with _Traits = std::char_traits<char>]
--
Summary: g++ doesn't recognize user-defined operator<<(ostream,
const pair<int, double> &)
Product: gcc
Version: 4.0.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: olaf dot dietsche at gfa-net dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26512
- Follow-Ups:
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: olaf dot dietsche at gfa-net dot de
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: pinskia at gcc dot gnu dot org
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: pinskia at gcc dot gnu dot org
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: olaf dot dietsche at gfa-net dot de
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: pinskia at gcc dot gnu dot org
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: olaf dot dietsche at gfa-net dot de
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: pinskia at gcc dot gnu dot org
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: olaf dot dietsche at gfa-net dot de
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: pinskia at gcc dot gnu dot org
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: bangerth at dealii dot org
- [Bug c++/26512] g++ doesn't recognize user-defined operator<<(ostream, const pair<int, double> &)
- From: bangerth at dealii dot org