Microsoft KB Archive/167113

= FIX: C2734, C2166: Caused by Template Function with const ref =

Article ID: 167113

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition

-



This article was previously published under Q167113



SYMPTOMS
The compiler generates the compiler error C2734 and C2166, when compiling a template function with a const reference of class T as an argument, where class T is a template parameter.

C2734: 'identifier' : const object must be initialized if not extern C2166: l-value specifies const object



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem was corrected in Visual C++ version 6.0 for Windows.



MORE INFORMATION
The following sample demonstrates the problem and the workaround.

Sample Code
/* Compiler Options: None */    //#define WORKAROUND1 // uncomment this line for workaround1 //#define WORKAROUND2 // uncomment this line for workaround2

template    T Test (const T& arg1)

{

#ifndef WORKAROUND1 T x ; x = arg1; #else T x = arg1 ; // WORKAROUND 1 #endif

return x;

}

int main {   #ifndef WORKAROUND2 int testValue = Test ( 7 ); #else int testValue = Test ( 7 ); // WORKAROUND 2 #endif

return 0; }

Keywords: kbbug kbfix kbvc600fix KB167113

-

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

© Microsoft Corporation. All rights reserved.