Для следующего фрагмента:
class A{
friend void f(){};
public:
A(){f();} //error
};
class B{
friend void f(void* ptr){};
public:
B(){f(this);} //no error
};
Согласно правилу, хотя функции друга могут быть определены внутри класса, но они не видны до тех пор, пока они не будут объявлены где-то вне области класса, ошибка в объясняется определение класса A. Но я смущен, почему фрагмент для класса B не создает ту же ошибку, что и класс A.
Пожалуйста, расскажите мне об этом?