Microsoft KB Archive/130276

= FIX: C2065 Error on Functions Returns Template Class By Value =

Article ID: 130276

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 2.1

-



This article was previously published under Q130276



SYMPTOMS
Any reference to a template function that returns a template class by value generates these errors:

error C2065: 'function name' : undeclared identifier

error C2064: term does not evaluate to a function C2065



RESOLUTION
Modify the function to return a reference to the template class instead of returning by value. In the "Sample Code" section of this article, function 'f1' returns a template class by value and fails. Function 'f2' returns a template class by reference and succeeds.



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem was fixed in Microsoft Visual C++, 32-bit Edition, version 4.0.



Sample Code
/* Compile options required: none template class M { public: T m; };

template M f1(const M& x) {return x;}

template

M& f2(const M& x) {return x;}

void test(void) {  M x;   M y = f1(x);  // errors C2065 & C2064 M z = f2(x); // no error } NOTE: Although this has been fixed under Visual C++ 4.0, the definition of function f2: template  M& f2(const M& x) {return x;} causes the following compilation errors:

error C2446: [*] 'return' : no conversion from 'const class M ' to 'class M &' (new behavior; please see help)

error C2561: 'f2' : function must return a value

To avoid this, the return value of that statement should be casted appropriately, as follows: M& f2(const M<T>& x) {return (M<T>&)x;}

Additional query words: 2.00 2.10 9.00 9.10

Keywords: kbbug kbfix kbcpponly kbcompiler KB130276

-

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

© Microsoft Corporation. All rights reserved.