Compiling:
template<class T>
class A
{
public:
static const unsigned int n = 1;
void foo ()
{
int i = n;
}
};
extern template class A<int>;
int main ()
{
A<int> a;
a.foo ();
}
fails with:
foo.cpp: In member function 'void A<T>::foo() [with T = int]':
foo.cpp:9: instantiated from 'const unsigned int A<int>::n'
foo.cpp:9: instantiated from 'void A<T>::foo() [with T = int]'
foo.cpp:18: instantiated from here
foo.cpp:9: error: explicit instantiation of 'A<int>::n' but no definition
available
foo.cpp:9: instantiated from 'const unsigned int A<int>::n'
foo.cpp:9: instantiated from 'void A<T>::foo() [with T = int]'
foo.cpp:18: instantiated from here
foo.cpp:9: error: explicit instantiation of 'A<int>::n' but no definition
available
--
Summary: Forward explicit intantiation declaration doesn't mix
well with static integral member
Product: gcc
Version: 4.0.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: nicos at maunakeatech dot com
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25260