Microsoft KB Archive/143352

= FIX: C2988 on Conversion Operator Between Two Template Classes =

Article ID: 143352

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 4.0 Professional Edition
 * Microsoft Visual C++ 4.1 Subscription
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 5.0 Learning Edition
 * Microsoft Visual C++ 5.0 Learning Edition

-



This article was previously published under Q143352



SYMPTOMS
When a conversion operator between two template classes is defined outside the template class, you may receive this error:

error C2988: unrecognizable template declaration/definition



RESOLUTION
Define the conversion operator inside the template class body.



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



Sample Code to Reproduce Problem
/* Compile options needed: None */

//#define _WORKAROUND  //uncomment this line to work around

template  class classA {  public:

classA(T& t) : m_t(t) {}

protected: T m_t; };

template  class classB {  public:

classB(const T& t) : m_t(t) {}

#ifndef _WORKAROUND operator classA;

#else operator classA  { return classA(m_t); }

#endif

protected: T m_t; };

#ifndef _WORKAROUND

// Error C2988 for the following function definition.

template  classB::operator classA {      return classA(m_t); }

#endif

void main {

classB b(2);

// Invoke template classB::operator classA<T> classA a = b;  }

Additional query words: kbVC400bug inline

Keywords: kbbug kbfix kbvc500fix kbcpponly kbcompiler KB143352

-

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

© Microsoft Corporation. All rights reserved.