Microsoft KB Archive/241569

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

Article ID: 241569

Article Last Modified on 6/2/2005

-

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++ 6.0 Standard Edition

-



This article was previously published under Q241569



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.



Steps to Reproduce Behavior
The following example demonstrates the error. //test.cpp // compiler option needed: none

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

Keywords: kberrmsg kbtshoot kbprb kbcpponly kbpending kbcompiler KB241569

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.