In general, whenever a name is encountered
it is necessary to look it up ([basic.lookup])
to determine whether that name denotes one of these entities
before continuing to parse the program that contains it.
An entity is a value, object, reference,
structured binding,
result binding,
function, enumerator, type,
class member, bit-field, template, template specialization, namespace, or
pack.
An entity E is denoted by the name (if any)
that is introduced by a declaration of E or
by a typedef-name introduced by a declaration specifying E.
A name used in more than one translation unit can potentially
refer to the same entity in these translation units depending on the
linkage of the name specified in each
translation unit.