Что происходит, когда вы делаете функцию-член класса другом самого себя!?
Приведенный ниже код компилируется и запускается. Без объявления друга создается «слишком много аргументов для оператора» (и это правильно). Я понимаю, что в этом нет никакого смысла, но может ли кто-нибудь сказать мне, что здесь происходит? Друг заставляет компилятор каким-то образом опустить этот параметр по умолчанию?
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;
}