Hay tal código:amigo función de acceso definido en la clase
#include <iostream>
class A{
public:
friend void fun(A a){std::cout << "Im here" << std::endl;}
friend void fun2(){ std::cout << "Im here2" << std::endl; }
friend void fun3();
};
void fun3(){
std::cout << "Im here3" << std::endl;
}
int main()
{
fun(A()); // works ok
//fun2(); error: 'fun2' was not declared in this scope
//A::fun2(); error: 'fun2' is not a member of 'A'
fun3(); // works ok
}
Cómo acceder a la función fun2()?
+1: Pregunta bien formulada. –
Vemos este tipo de código en el puntero inteligente de boost: intrusive_ptr, que me hizo en primer lugar resolver lo que debería ser. Para mí no tiene sentido definirlo de esa manera, más bien definir a un amigo en algún lugar del alcance y marcar un prototipo como amigo en la declaración de alcance de clase, ¡que es más legible! – Gabriel