FIX: Non-const Conversion Operators Allowed on const Object (132165)



The information in this article applies to:

  • Microsoft C/C++ for MS-DOS 7.0
  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.52
  • Microsoft Visual C++, 32-bit Professional Edition 2.0
  • Microsoft Visual C++, 32-bit Professional Edition 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
}
				

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbbug kbfix KB132165