FIX: C2166 Incorrect Type Deduction for Template ParameterLast reviewed: December 18, 1997Article ID: Q168008 |
The information in this article applies to:
SYMPTOMSThe 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 RESOLUTIONDo not use a literal when calling the template function. Instead, declare a variable, and pass the variable as an argument to the template function.
STATUSMicrosoft 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:
ARTICLE-ID: Q170365 TITLE : INFO: Visual Studio 97 Service Packs - What, Where, and Why MORE INFORMATIONThe 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<class T> 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 : CPPIss CPPLngIss vcbuglist500 VS97FixlistSP3 kberrmsg kbtool VS97FixlistSP2 VS97FixlistSP1 Version : 5.0 Platform : NT WINDOWS Issue type : kbbug Solution Type : kbfix kbservicepack |
================================================================================
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |