Если у меня есть класс, не являющийся шаблоном (то есть «обычный»), и я хочу иметь функцию друга шаблона, как мне написать ее, не вызывая ошибки компилятора? Вот пример, иллюстрирующий то, что я пытаюсь сделать:
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" не является функцией. Что здесь нужно сделать по-другому?