Сейчас приходится погружаться во внутренности С++ и я с удивлением (на самом деле, благодаря случайной ошибке) обнаружил, что в С++ у классов могут быть воображаемые друзья (это определенно язык, который создан мной :DDD).
То есть код
#include <iostream>
class Foo {
friend class Bar;
public:
void exec() {
std::cout << "Exec foo object method\n";
}
};
int main() {
Foo foo;
foo.exec();
return 0;
}
Вполне успешно компилируется и работает.
В первый момент мое удивление было непередаваемо. Класса Bar
просто не существует, то есть у Foo
появился воображаемый друг? Немного покурив маны, я понял, что обьявление класса дружественным влияет на класс, который обьявлен дружественным, а не на класс, который обьявил его другом. Возможно, достаточно тривиальная вещь, но мне такое поведение показалось достаточно забавным.