Наследуются ли дружественные функции от асбтрактного класса?
Вопрос продиктован выше. Если дополнить его, то хочется выяснить, возможно ли это и в каких случаях. Потому что сам использовал подобное, всё работало, никаких ошибок компиляции, утечек памяти не было, проверял спец. программами. Прошу утверждать не аксиомами, а с приведением ссылок на подтверждающие документы.
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Смотря в каком смысле наследуются. Является ли друг родителя другом потомка? Нет.
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 заглядывает в родителей тоже.