BUG: C2084 on Overloading Function Templates (268239)



The information in this article applies to:

  • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
  • Microsoft Visual C++, 32-bit Professional Edition 6.0
  • Microsoft Visual C++, 32-bit Learning Edition 6.0

This article was previously published under Q268239

SYMPTOMS

You may receive the following error message if you try to overload a template function that has class templates as parameters:
error C2084: function 'void __cdecl f1(class A<T>,class A<T>)' already has a body
Please refer to the sample code in the "More Information" section for details.

RESOLUTION

See the workaround in the sample code in the "More Information" section.

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

Steps to Reproduce Behavior

The following sample code demonstrates the bug and the workaround:
//test.cpp
// Compiler option needed: none.<BR/>
//#define WORKAROUND  //Uncomment this line to work around the bug.
template<class T>
class A {
};

#ifndef WORKAROUND
template<class T>
void f1(A<T> a, A<T> b){}
#else
template<class T1, class T2>
void f1(A<T1> a, A<T2> b){}
#endif
void f1(A<int> a, A<long> b){} //C2084 here. 
void f1(A<int> a, A<int> b){}  //Compiles fine.
void f1(A<long> a, A<long> b){} //Compiles fine.

int main()
{
A<int>  a;
A<long>  b;
f1(a,b);
return 0;
}

 
				

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbBug kbCompiler kbCPPonly KB268239