Microsoft KB Archive/132165

= FIX: Non-const Conversion Operators Allowed on const Object =

Article ID: 132165

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft C/C++ Professional Development System 7.0
 * 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

-



This article was previously published under Q132165



SYMPTOMS
Visual C++ illegally allows use of non-const member functions with const objects. Because of this, const data could be modified.

Visual C++ correctly generates errors in most situations where non-const member functions are used on const objects, but fails to generate errors in the case of non-const conversion operators.



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Microsoft Visual C++, 32-bit Edition, version 4.0.



MORE INFORMATION
The sample code should generate this error message:

error C2664: 'x_t::x_t(const struct x_t&)' : cannot convert parameter 1 from 'struct x_t*const ' to 'const struct x_t&'

Sample Code to Reproduce Problem
/* Compile options needed: none struct x_t { int i; operator int {return i;} };

void func(const x_t& x) { int j = (int)x;    //C2664 should be generated on this line }

Additional query words: 1.00 2.00 2.10 2.20 7.00 8.00 8.00c 9.00 9.10

Keywords: kbbug kbfix KB132165

-

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

© Microsoft Corporation. All rights reserved.