n3290中的一点:依赖于参数的名称查找
A point from n3290 :Argument-dependent name lookup
n3290 ISO标准草案中的一点:第3.4.2节,第二点
For each argument type T in the function call, there is a set of zero or
more associated namespaces and aset of zero or more associated classes to
be considered. The sets of namespaces and classes is determined entirely
by the types of the function arguments (and the namespace of any template
template argument).Typedef names and using-declarations used to specify
the types do not contribute to this set. The sets of namespaces and
classes are determined in the following way:
— If T is a fundamental type, its associated sets of namespaces and
classes are both empty. ##1st point
— If T is a class type (including unions), its associated classes are:
the class itself; the class of which it is a member, if any; and its
direct and indirect base classes. Its associated namespaces are the
namespaces of which its associated classes are members. Furthermore,
if T is a class template specialization, its associated namespaces and
classes also include: the namespaces and classes associated with the
types of the template arguments provided for template type parameters
(excluding template template parameters); the namespaces of which any
template template arguments are members; and the classesof which any
member templates used as template template arguments are members.
[ Note: Non-type template arguments do not contribute to the set of
associated namespaces.—end note ] ##2nd point
— If T is an enumeration type, its associated namespace is the namespace
in which it is defined. If it is class member, its associated class is
the member’s class; else it has no associated class. ##3rd point
— If T is a pointer to U or an array of U, its associated namespaces and
classes are those associated with U. ##4th point
— If T is a function type, its associated namespaces and classes are
those associated with the function parameter types and those associated
with the return type. ##5th point
— If T is a pointer to a member function of a class X, its associated
namespaces and classes 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 namespaces
and classes are those associated with the member type together with those
associated with X. ##6th point
If an associated namespace is an inline namespace (7.3.1), its enclosing
namespace is also included in the set. If an associated namespace directly
contains inline namespaces, those inline namespaces are also included in
the set. In addition, if the argument is the name or address of a set of
overloaded functions and/or function templates, its associated classes
and namespaces are the union of those associated with each of the members of
the set, i.e., the classes and namespaces associated with its parameter
types and return type. Additionally,if the aforementioned set of overloaded
functions is named with a template-id, its associated classes and namespaces
also include those of its type template-arguments and its template
template-arguments.
在这里我理解了第二、第三和;第6点。。谁能试着举几个例子吗。。理解另一点。。请举例说明?
此外,在第二点中,他给出了一个注释:"非类型模板参数对相关名称空间集没有贡献"。。也解释一下。。。?
它解释了如何根据函数的参数查找函数。
1) 基本类型不是命名空间或类的成员,因此它们不起作用。
2b)非类型模板参数是值,不起作用。
4) 如果类型是T*或T[],则将其视为T。
5) 如果参数是另一个函数,则递归搜索其关联的命名空间或类。
相关文章:
- 类成员函数参数列表是否可以依赖于模板参数?
- 如何定义依赖于参数包转换的函数的返回类型
- C++ 使函数调用依赖于模板参数
- 如何初始化依赖于先前条目的可变参数模板?
- 如何修复"没有依赖于模板参数的参数'glGenVertexArrays'......"C++ 中的错误
- 运算符<<依赖于参数的查找不在全局命名空间中查找
- 依赖于其他模板参数的模板参数
- 使用不依赖于方法模板参数的enable_if
- 如何定义具有依赖于符号调试的参数的函数
- 如何让成员函数实现依赖于类的模板参数?
- 如何避免参数数量依赖于条件的调用分支?
- 为什么在这种情况下不考虑依赖于参数的查找?
- 如何定义依赖于模板参数的类型定义
- 类型依赖于可变参数模板的类
- C++是否可以创建依赖于单个构造函数参数的派生类而不是bass类
- 我如何避免使用依赖于参数的查找明确专门化模板化功能
- 为什么默认参数不能依赖于非默认参数?
- 为什么在语句"std::cout << std::endl;"中使用时需要命名空间限定,给定依赖于参数的查找?
- C++ 错误:"没有依赖于模板参数的'setw'参数
- 依赖于模板参数的范围查找