Microsoft KB Archive/120878

= PRB: Operator New Can't Be Called for CONST or VOLATILE Types =

Article ID: 120878

Article Last Modified on 12/2/2003

-

APPLIES TO


 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 1.5 Professional Edition
 * Microsoft Visual C++ 1.51
 * Microsoft Visual C++ 1.52 Professional Edition
 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 2.1
 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition

-



This article was previously published under Q120878



SYMPTOMS
When trying to allocate memory from the heap on const or volatile types, you may see this error:

error C2468: 'new' : cannot allocate 'const'/'volatile' objects

(type is 'const int ')



CAUSE
This behavior is by design. For any type T, the type-specifier cannot contain const T or volatile T. For example, the following type-specifiers won't work:   new const int;        // Returns 'const int *' new volatile int;    // Returns 'volatile int *' new int * const;     // Returns 'int * const *' new int * volatile;  // Returns 'int * volatile *'



RESOLUTION
The following type-specifiers will work:   new int const *;      // Returns 'int const **' (or 'const int**') new int volatile *;  // Returns 'int volatile **' // (or 'volatile int**')



MORE INFORMATION
For more information, please see the description on 'new Operator' in the C++ Language Reference that comes with Microsoft C/C++ version 7.0 and Microsoft Visual C++ version 1.0 for Windows or Windows NT.

Sample Code
/* Compile options needed: /c /W3 */

void main(void) {  // illegal

// Would return a 'const int *' const int* i = new const int;

// Would return a 'volatile int *' volatile int* j = new volatile int;

// Would return a 'int * const *' int* const* k = new int * const;

// Would return a 'int * volatile *' int* volatile* l = new int * volatile;

// legal

// pointer to const pointer to int int const* *m = new int const *;

int volatile* *n = new int volatile *; }

Additional query words: errmsg 8.00 8.00c 9.00 9.10

Keywords: kberrmsg kblangcpp kbprb KB120878

-

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

© Microsoft Corporation. All rights reserved.