[Bug c++/40056] implicit instantiation of function templates fails with -O2, works with -O and -g...
redi at gcc dot gnu.org
Thu Mar 8 21:06:00 GMT 2012
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-03-08 21:05:02 UTC ---
(In reply to comment #9)
> Hmm, I can't understand this (though I don't know all the details of the C++
> standard). If I'm writing class MyClass with public method Read, this is
> absolutely normal to declare Read function in the class declaration in the
> MyClass.h header and define it in the MyClass.cpp. Templates are supposed to
> work just as a normal functions, with the difference that code is written once,
> instead of writing a bunch of overloaded functions.
No, they aren't just like normal functions.
Maybe you should read
> If all templates must be defined in the single header, this would make an
> thousands lines of code header file.
Who said they have to be in a /single/ header?
Have you ever looked at the implementation of e.g. <string> or <vector>?
They're entirely defined in headers. There's a reason for that.
> And explicit template will require
> compile-tyme type specification, which is impossible due to RTTI being used.
I don't know what RTTI has to do with anything and don't know what you mean.
The explicit instantiation you need is the one that you get a linker error for
int TStreamerInfo::ReadBuffer(TBuffer&, char** const&, int, int, int, int);
More information about the Gcc-bugs