Name lookup
associates the use of a name with a set of declarations (
[basic.def]) of
that name
. If the declarations found by name lookup
all denote functions or function templates,
the declarations are said to form an
overload set. The declarations found by name lookup shall either
all denote the same entity or form an overload set
. The access rules (
[class.access])
are considered only once name lookup and
function overload resolution (if applicable) have succeeded
. Only after
name lookup, function overload resolution (if applicable) and access
checking have succeeded
are the semantic properties introduced by the name's declaration
and its reachable (
[module.reach]) redeclarations
used further in expression processing (
[expr])
.