BUG: C2258 and C2252 on in Place Initialization of Static Const Members

ID: Q241569


The information in this article applies to:
  • Microsoft Visual C++, 32-bit Editions, versions 5.0, 6.0


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.


RESOLUTION

Use one of the following Resolutions:

  • 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 this to be a bug in the Microsoft products 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; 
};
 

Additional query words:

Keywords : kbCompiler kbCPPonly kbVC kbVC500 kbVC500bug kbVC600 kbVC600bug kbDSupport
Version : winnt:5.0,6.0
Platform : winnt
Issue type : kbbug


Last Reviewed: October 12, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.