Microsoft KB Archive/168008

= FIX: C2166 Incorrect Type Deduction for Template Parameter =

Article ID: 168008

Article Last Modified on 10/17/2003

-

APPLIES TO


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

-



This article was previously published under Q168008



SYMPTOMS
The compiler deduces incorrect type for a template parameter T, associated with a template function that takes a const reference of type T, causing the compiler error C2166 as follows:

l-value specifies const object



RESOLUTION
Do not use a literal when calling the template function. Instead, declare a variable, and pass the variable as an argument to the template function.



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug has been corrected in Visual Studio 97 Service Pack 1.

For additional information about the Visual Studio 97 Service Pack 1, please see the following article in the Microsoft Knowledge Base:

170365 INFO: Visual Studio 97 Service Packs - What, Where, and Why



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

Sample Code
/*  * Compiler Options: None */

#define BUG //Workaround: comment the line above //Uncomment the following line //#define WORKAROUND

template void Test(const T& x)  { T y = x;     if(y < 0) y = -y; }

int main {  #ifdef BUG Test(3) ; #endif

#ifdef WORKAROUND int n = 3 ; Test(n) ; #endif

return 0 ; }

Keywords: kberrmsg kbbug kbfix kblangcpp kbvs97sp1fix kbcpponly kbcode kbcompiler KB168008

-

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

© Microsoft Corporation. All rights reserved.