3.4 Name lookup [basic.lookup]
1 The name lookup rules apply uniformly to all names (including typedef-names (7.1.3), namespace-names
(7.3) and class-names (9.1)) wherever the grammar allows such names in the context discussed by a particular
rule. Name lookup associates the use of a name with a declaration (3.1) of that name. Name lookup
shall find an unambiguous declaration for the name (see 10.2). Name lookup may associate more than one
declaration with a name if it finds the name to be a function name; the declarations are said to form a set of
overloaded functions (13.1). Overload resolution (13.3) takes place after name lookup has succeeded. The
access rules (clause 11) 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 attributes introduced by the name’s declaration used further in expression
processing (clause 5).