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.
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 <class T> 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 <int> ( 7 ); // WORKAROUND 2 #endif return 0; }
Keywords: kbbug kbfix kbvc600fix KB167113