PRB: C2059 When Declaring Friend Template Functions in a Class (140605)



The information in this article applies to:

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

This article was previously published under Q140605

SYMPTOMS

Attempting to declare a friend template function in a class definition may result in the following errors:
error C2059: syntax error: 'template'
error C2238: unexpected token(s) preceding ';'

CAUSE

This is a relatively new language feature that is currently not supported by the Visual C++ 4.0 compiler. For example, the following code will generate the errors noted above.

Sample Code

/* Compile options needed: none
*/ 
class A;
template <class T> void f(T, A *a)  { a->x; }

class A
{
private:
   int x;
   template <class T> friend void f(T, A*);
};

int main(void)
{
   A a;
   f(5, &a);
   f(1.5, &a);
   return 0;
}
				

STATUS

This behavior is by design.

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbCompiler kbprb KB140605