Member predicate AccessHolder::canAccessClass
Holds if a base class base
of derived
is accessible at this
(N4140
11.2/4). When this holds, and derived
has only one base subobject of
type base
, code in this
can implicitly convert a pointer to derived
into a pointer to base
. Conversely, if such a conversion is possible
then this predicate holds.
For the sake of generality, this predicate also holds whenever base
=
derived
.
This predicate is pragma[inline]
because it is infeasible to fully
compute it on large code bases: all classes derived
can be converted to
their public bases base
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
together with base
or derived
are sufficiently
restricted.
predicate canAccessClass(Class base, Class derived)