This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/32534] New: gcc fails to initialize template's static data members before their use in some cases
- From: "vlbel at mail dot ru" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 Jun 2007 10:36:17 -0000
- Subject: [Bug c++/32534] New: gcc fails to initialize template's static data members before their use in some cases
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
the following programm
-----------------------------------------------
#include <iostream>
struct A
{
A() : value(0) {}
int value;
};
template<class T>
struct B
{
static A a;
};
template<class T> A B<T>::a;
//template<> A B<int>::a;
template<class T>
struct C
{
C() { B<int>::a.value = 1; }
};
C<float> c;
main()
{
std::cout << B<int>::a.value << std::endl;
}
-------------------------------------------------
prints 0 instead of expected 1.
It is important that C is template. Otherwise (if C is ordinary class) the
output is 1.
If I use "template<> A B<int>::a;" instead of "template<class T> A B<T>::a;" I
got linker error: undefined reference to 'B<int>::a'.
I can't use "template<> A B<int>::a = something;" form (which would help)
because I have only empty ctor (like in the case of map).
--
Summary: gcc fails to initialize template's static data members
before their use in some cases
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: vlbel at mail dot ru
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32534