Microsoft KB Archive/122443

= FIX: C2664 When Converting Type Defined Array to Const Array =

Article ID: 122443

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 2.0 Professional Edition

-



This article was previously published under Q122443



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.



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: kbbug kbfix KB122443

-

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

© Microsoft Corporation. All rights reserved.