¿Qué sucede cuando haces que una función miembro de una clase sea amiga de sí misma?Hacer que un miembro funcione como amigo
El siguiente código compila y ejecuta. Sin la declaración del amigo, se generan "demasiados argumentos para el operador" (y con razón). Me doy cuenta de que hacer esto no tiene ningún sentido, pero ¿alguien puede decirme qué está pasando aquí? ¿El amigo fuerza al compilador a omitir el parámetro predeterminado de alguna manera?
class Test
{
public:
friend bool operator<(Test& lhs, Test& rhs)
{
return true;
}
};
int main(int c, char** argv)
{
Test test1;
Test test2;
return test1 < test2;
}
Para responder a su pregunta: Los amigos no pueden ser miembros de la clase de amistad en C++ 03, pero se permite en C++ 0x. –
tengo curiosidad, ¿qué posible punto podría haber para permitir que una función miembro sea amiga de sí misma ya que ya tiene acceso completo? – radman
Ver http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#77 o la historia (ese caso particular no es de mucha importancia, porque las clases anidadas tienen acceso completo al clase de anidación en C++ 0x y la mayoría de los compiladores de C++ 03 de todos modos). –