Member predicate 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)