FIX: Non-const Conversion Operators Allowed on const Object

ID: Q132165


The information in this article applies to:
  • Microsoft C/C++ Compiler (CL.EXE), included with:
    • Microsoft C/C++ for MS-DOS, version 7.0
    • Microsoft Visual C++ for Windows, versions 1.0, 1.5, 1.51, 1.52
    • Microsoft Visual C++ 32-bit Edition, versions 1.0, 2.0, 2.1, 2.20


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 :
Version : :1.0,1.5,1.51,1.52,2.0,2.1,2.20
Platform : MS-DOS NT WINDOWS
Issue type :


Last Reviewed: February 2, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.