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:
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<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: kberrmsg kbbug kbfix kblangcpp kbvs97sp1fix kbcpponly kbcode kbcompiler KB168008