FIX: C2988 on Conversion Operator Between Two Template ClassesLast reviewed: September 19, 1997Article ID: Q143352 |
The information in this article applies to:
SYMPTOMSWhen a conversion operator between two template classes is defined outside the template class, you may receive this error:
error C2988: unrecognizable template declaration/definition RESOLUTIONDefine the conversion operator inside the template class body.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ version 5.0.
MORE INFORMATION
Sample Code to Reproduce Problem
/* Compile options needed: None */ //#define _WORKAROUND //uncomment this line to work around template<class T> class classA { public: classA(T& t) : m_t(t) {} protected: T m_t; }; template<class T> class classB { public: classB(const T& t) : m_t(t) {} #ifndef _WORKAROUND operator classA<T>(); #else operator classA<T>() { return classA<T>(m_t); } #endif protected: T m_t; }; #ifndef _WORKAROUND // Error C2988 for the following function definition. template<class T> classB<T>::operator classA<T>() { return classA<T>(m_t); } #endif void main() { classB<int> b(2); // Invoke template<class T> classB<T>::operator classA<T>() classA<int> a = b; } |
Additional query words: inline
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |