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
variable,
structured binding,
result binding,
function,
enumerator,
type,
type alias,
non-static data member,
bit-field,
template,
namespace,
namespace alias,
template parameter,
function parameter, or
init-capture.
The underlying entity of an entity is that entity
unless otherwise specified.
A name denotes the underlying entity of
the entity declared by each declaration that introduces the name.
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.