Member predicate Declaration::AccessHolder::couldAccessMember

Holds if a hypothetical non-static member of memberClass with access specifier memberAccess is accessible at this when named in a class derived that is derived from or equal to memberClass (N4140 11.2/5 and 11.4).

This predicate determines whether an expression x.m would be allowed in this when x has type derived and m has memberAccess in memberClass. The more general syntax x.N::n, where N may be a base class of derived, is not supported. This should only affect very rare edge cases of 11.4.

This predicate is pragma[inline] because it is infeasible to fully compute it on large code bases: all classes memberClass have their public members accessible from everywhere (this), so this predicate could yield a number of tuples that is quadratic in the size of the program. To avoid this combinatorial explosion, only use this predicate in a context where this and memberClass are sufficiently restricted when memberAccess is public.

predicate couldAccessMember(Class memberClass, AccessSpecifier memberAccess, Class derived)