BUG: C2059 Initializing Static Data Member of a Template ClassLast reviewed: January 15, 1998Article ID: Q179273 |
The information in this article applies to:
SYMPTOMSThe compiler generates the following errors when compiling the sample code shown below (the code initializes a static data member of a template class):
C2059: syntax error : syntax error : 'string' C2063: 'identifier' : 'r' : not a function C2040: 'operator' : 'r' : 'class Register (void)' differs in levels of indirection from 'class Register' RESOLUTIONTo workaround this problem, use the assignment operator when initializing the static data member of a template class.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. We are researching this bug and will post new information here in the Microsoft Knowledge Base as it becomes available.
MORE INFORMATIONThe following sample code demonstrates the problem and the workaround:
SAMPLE
/* Compile options needed: none */ #include <stdio.h> class Register { public: Register( const char* class_name ) { printf("In Register ctor for class %s.\n", class_name); } ~Register() { printf("In Register dtor.\n"); } }; template<class T> class Base { public: static Register r; }; template<class T> Register Base<T>::r( "Base<T>" ); //Cause of C2059, C2063 and C2040 // To workaround the problem, comment the line above and // uncomment the following line: // Register Base<T>::r = Register("Base<T>"); int main() { return 0; } |
Additional query words: initializer
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |