This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[C++]: Error definiting static member in templates with initialization
- To: gcc-bugs at gcc dot gnu dot org
- Subject: [C++]: Error definiting static member in templates with initialization
- From: Clemens Hintze <clemens dot hintze at alcatel dot de>
- Date: Thu, 2 Mar 2000 09:34:19 +0100 (MET)
- Cc: loh <Klaus dot Vossloh at alcatel dot de>
- Original-Cc: Klaus Voßloh <Klaus.Vossloh@alcatel.de>
- PP-Warning: Parse error in original version of preceding Cc line
OS: OSF1 slbhdg V4.0 1229 alpha
GCC: 2.95.2
Hello,
on 18th of November last year I have sent a bug report describing a
serious problem with GCC 2.95.2 on a DEC Alpha machine! As I have got
no answer from you, I suppose that something went wrong during sending
of my mail.
Therefore I have recomposite that bug report. Please be so kind to
give me an answer so that I know you have got the mail this time.
Here we go ...
At 17th of November last year, I have installed the GCC on our alpha
machine. All went well. My first test compilation of some C++ code of
mine, was successful. But then I have tried to compile a code, that
heavily rely on templates.
The compilation was successful, but the linker moaned, that it cannot
resolve the symbol to a static member of the template class. The same
compilation with the same compiler version was ok for:
- SunOS slbh88 5.7 Generic_106541-07 sun4u sparc SUNW,Ultra-Enterprise
- Linux 2.2.10
After some investigation of the assembler output, it seems to me, that
the definition of the static member will not find its way into the .s
file, *IF* I do both *define* the static member, and *initialize* it
with the same statement.
That means:
template <class T>
int Test<T>::val;
will work, but if I do this:
template <class T>
int Test<T>::val = 0;
the C++ compiler will not forsee storage for this member! So the
linker will complain!!!
I have attached a bzipped tarfile containing following files:
tst.cc - Source that show you the wrong behavior
tst.log - [c++ -v --save-temps -o tst tst.cc >& tst.log]
tst.ii - You know :-)
tst.s - That too ;-)
If there is a patch to solve that problem, could you tell me, how I
can find it?
Thanks in advance for all,
Clemens Hintze
bug_tst.tar.bz2