BUG with template instantiation

Philippe Lavoie lavoie@zeus.genie.uottawa.ca
Sun Apr 5 16:09:00 GMT 1998

Alexandre Oliva writes:
 > -fguiding-decls breaks iostreams.  Write correct ANSI/ISO C++, by
 > adding the following declarations:
 > template <class T> class Fred;
 > template <class T> friend ostream& operator<<(ostream&, const Fred<T>&);
 > template <class T> friend istream& operator>>(istream&,       Fred<T>&);
 > Then, add `<>' when you refer to these template functions in friend
 > declarations.

Thanks for the information. I did this in all my sources. But it seems
there is still a problem with stream... i.e. I get the following
output (I don't use guiding-decls)

>c++2 -I/usr/openwin/include -I/home/yoho2/lavoie/include -I../include -g -O2 -fno-implicit-templates -c tvqSort.C

>c++2 -o tvqSort tvqSort.o  -L/usr/openwin/lib -L/home/yoho2/lavoie/lib -L/home/yoho2/lavoie/lib   ../src/libmatrix.a  -L/usr/openwin/lib -L/home/yoho2/lavoie/lib -lXt -lX11 -lmfhdf -ldf -lXpm -lpng -ljpeg -lmpeg -ltiff -lz -ldpstk -ldps -ljbig -lMagick -lm -lc 
Undefined                       first referenced
 symbol                             in file
ostrstream type_info node           ../src/libmatrix.a(vector.o)
ostrstream type_info function       ../src/libmatrix.a(vector.o)
istream & operator>><double>(istream &, complex<double> &)../src/libmatrix.a(barray.o)
ld: fatal: Symbol referencing errors. No output written to tvqSort
collect2: ld returned 1 exit status

I really don't understand the first two. and I can't get rid of the
last one even though I added this line in the barray.cpp code

template istream& operator>><double>(istream& , complex<double>& ) ;

Is there a problem with template instantiation ? Or am I still missing
something about the new draft. The first two errors are really strange
because I don't have any operator>> or operator<< (or any functions
with stream in them) in the vector.cpp source.



More information about the Gcc-bugs mailing list