Если у меня есть не шаблонный (то есть «нормальный») класс, и я хочу иметь функцию друга шаблона, как мне написать его, не вызывая ошибки компилятора? Вот пример, чтобы проиллюстрировать, что я пытаюсь сделать:
template <class T>
void bar(T* ptr);
class MyClass // note that this isn't a template class
{
private:
void foo();
template <class T>
friend void bar(T*); // ERROR: compiler gives me all kinds of grief
};
template <class T>
void bar(T* ptr)
{
if (ptr)
{
MyClass obj;
obj.foo();
}
}
Я использую Visual Studio 2005, и конкретная ошибка, которую мне дают, ошибка C2063 , утверждающая, что "bar" не является функцией. Что здесь нужно сделать иначе?