Сделать функцию-член другом

Что происходит, когда вы делаете функцию-член класса другом самого себя!?

Приведенный ниже код компилируется и запускается. Без объявления друга создается «слишком много аргументов для оператора» (и это правильно). Я понимаю, что в этом нет никакого смысла, но может ли кто-нибудь сказать мне, что здесь происходит? Друг заставляет компилятор каким-то образом опустить этот параметр по умолчанию?

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;
}
7
задан radman 6 December 2010 в 04:49
поделиться