Not in response to just this post but all trying to modify friends & access.The idea is we should be making the language simpler, not more complex.If you are trying to give partial access to part of your class, you have a design problem.Too many divergent features in one class (failed cohesiveness). Break it up. Move it around.In general, using 'friend' is a code smell for anti-enpasilization and a weak design, (you left the backdoor open)IMHO, One of the few valid uses is for hidden friends (ADL operator overloading).On Sat, Jun 21, 2025 at 3:15 AM SD SH via Std-Discussion <std-discussion@lists.isocpp.org> wrote:--How about adding conditions for friend?Like this (or other?):
class B { };
class E{int i;E(int i) : i(i) { }};class A
{static int i = 0;friend typename T if(std::is_base_of<B, T>::value); // if a class derived from B, it is a friend class of Afriend E if(std::is_default_constructible<E>::value); // E is not a friend class of A because std::is_default_constructible<E>::value == false
};class C : B{public:int geti(){return A::i; // OK, because std::is_base_of<B, C>::value == true
}
};class D{public:int geti(){return A::i; // Error, because std::is_base_of<B, D>::value == false
}};
A Probably Syntax:friend <type-id> if/*constexpr*/(<constexpr-bool-expression>);
It may be a useful syntax feature.
E. S. Himers2025/06
Std-Discussion mailing list
Std-Discussion@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-discussion