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. |