Article ID: 241569 - Last Review: June 2, 2005 - Revision: 3.0

Error C2258 and error C2252 occur if you try to perform in-place initialization of static const integral member data in Visual C++

This article was previously published under Q241569
Expand all | Collapse all

SYMPTOMS

You may get the following error message if you try to perform in-place initialization of static const integral member data.
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'x' : pure specifier can only be specified for functions
				
Please refer to the sample in the "More Information" section for details.

CAUSE

The compiler does not support in-place initialization of static const integral member data as specified in the C++ standard (section 9.2) quoted in the following:

4 - A member-declarator can contain a constant-initializer only if it declares a static member of integral or enumeration type.

WORKAROUND

Use one of the following workarounds:
  • Use enum instead of static const int:
    enum{x = 3};
    						
  • Instantiate the member outside the class:
    const int A::x=3;
    						

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

Steps to Reproduce Behavior

The following example demonstrates the error.
//test.cpp
// compiler option needed: none

class A 
{ 
	const static int x = 3; 
};

				

APPLIES TO
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Keywords: 
kberrmsg kbtshoot kbprb kbcpponly kbpending kbcompiler KB241569
 

Article Translations