Наследуются ли дружественные функции от асбтрактного класса?

Вопрос продиктован выше. Если дополнить его, то хочется выяснить, возможно ли это и в каких случаях. Потому что сам использовал подобное, всё работало, никаких ошибок компиляции, утечек памяти не было, проверял спец. программами. Прошу утверждать не аксиомами, а с приведением ссылок на подтверждающие документы.


Ответы (1 шт):

Автор решения: HolyBlackCat

Смотря в каком смысле наследуются. Является ли друг родителя другом потомка? Нет.

[class.friend]/10

Friendship is neither inherited nor transitive.

С другой стороны:

struct A
{
    friend void foo(auto &&) {}
};

struct B : A {};

struct C {};

int main()
{
    foo(42); // error, no ADL for primitive types
    foo(A{}); // ok, because of ADL
    foo(B{}); // ok, because ADL looks into base classes
    foo(C{}); // error, ADL doesn't look in unrelated class A
}

friend-определения ищутся только через ADL (сходу цитату не нашел, но проверяется легко), а ADL заглядывает в родителей тоже.

→ Ссылка