In C++, there’s often multiple ways to refer to the same entity: aliases,
inherited names, injected names, names that differ in qualification…
Usually, if an entity has multiple names, which one you use won’t matter:
you can use any of those synonymous names and the compiler won’t care.
But each entity always has a uniquely “truest” name, privileged above
all the other ways to refer to it. In some situations, in order to do a thing
with an entity, you do actually need to call it by its “true name.” Here is a
(non-exhaustive) list of such situations.