For each argument type
T in the function call,
there is a set of zero or more
associated entities
to be considered
. The set of entities is determined entirely by
the types of the function arguments
(and any template template arguments)
. The set of entities
is determined in the following way:
If
T is a fundamental type, its associated set of
entities is empty
.If
T is a class type (including unions),
its associated entities are:
the class itself;
the class of which it is a member, if any;
and, if it is a complete type, its direct and indirect base classes
. Furthermore, if
T is a class template specialization,
its associated entities also include:
the entities
associated with the types of the template arguments
provided for template type parameters;
the templates used as template template arguments; and
the classes of which any member templates used as template template
arguments are members
. [
Note 2:
Non-type template arguments do not
contribute to the set of associated entities
. —
end note]
If
T is an enumeration type,
its associated entities are
T
and, if it is a class member, the member's class
.If
T is a pointer to
U or an array of
U,
its associated entities are those associated with
U.If
T is a function type, its associated
entities are those associated with the function parameter types and those
associated with the return type
.If
T is a pointer to a member function of a class
X, its associated entities are those associated
with the function parameter types and return type, together with those
associated with
X.If
T is a pointer to a data member of class
X, its
associated entities are those associated with the member
type together with those associated with
X.
In addition, if the argument is an overload set or the address of such a set,
its associated entities
are the union of those associated with each of the
members of the set, i.e., the entities associated with its
parameter types and return type
.