FIX: C2664 When Converting Type Defined Array to Const Array

ID: Q122443


The information in this article applies to:
  • Microsoft C/C++ Compiler (CL.EXE), included with:
    • Microsoft Visual C++ 32-bit Edition, version 2.0


SYMPTOMS

The C/C++ compiler incorrectly generates a C2664 error when attempting to implicitly convert from a typedef non-constant array type to a constant array type. The compiler reports an error that indicates a conversion from a constant array type to a non-constant array type. The following error message is reported by the compiler if a non-constant integer array type is used:

test.cpp(#): error C2664: 'copy' : cannot convert parameter 1 from 'const int[2]' to 'int[2]'
The # is the line number where the error occured.


RESOLUTION

To work around the problem, typedef a constant array type instead of using the keyword 'const' together with the typedef non-constant array type. An example is shown in the Sample Code section in this article.


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

Sample Code


/* Compile options needed: none
*/ 

/* -- test.cpp -- */ 

typedef       int ARRAY[2];
typedef const int CONST_ARRAY[2];

void copy ( const ARRAY src, ARRAY dest );
void copy1( CONST_ARRAY src, ARRAY dest );

class CTest
{
  private:
    ARRAY pts[2];
  public:
    void operator=( const CTest& src );
};

void CTest :: operator=( const CTest& src )
{
  for ( int i=0; i<2; i++ )
  {

   copy ( src.pts[i], pts[i] );   // Generates C2664
   copy1( src.pts[i], pts[i] );   // Workaround

  }
} 

Additional query words: 2.00 9.00 buglist2.00

Keywords :
Version : :2.0
Platform : NT WINDOWS
Issue type :


Last Reviewed: January 20, 2000
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.