Member predicate AccessHolder::canAccessMember
Holds if a non-static member member
is accessible at this
when named
in a class derived
that is derived from or equal to the declaring class
of member
(N4140 11.2/5 and 11.4).
This predicate determines whether an expression x.member
would be
allowed in this
when x
has type derived
. The more general syntax
x.N::member
, 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 concerns only access and thus does not determine whether
member
can be unambiguously named at this
: multiple overloads may
apply, or member
may be declared in an ambiguous base class.
This predicate is pragma[inline]
because it is infeasible to fully
compute it on large code bases: all public members member
are 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 member
are sufficiently restricted when member
is public.
predicate canAccessMember(Declaration member, Class derived)