3.4.2 从 n3290 草案中查找依赖于参数的名称
ISO 草案 n3290 第 3.4.2 节第 1 段中的一点:
当函数调用中的后缀表达式是unqualified-id时,可能会搜索在通常的非限定查找过程中未考虑的其他命名空间,并且在这些命名空间中,可能会找到不可见的名称空间范围友元函数声明。对搜索的这些修改取决于参数的类型(对于模板模板参数,则取决于模板参数的命名空间)。
在这里他们说“这些对搜索的修改取决于参数/模板模板参数/模板参数的命名空间的类型”......任何人都可以用一个例子来解释吗?我尝试使用参数类型..请使用模板模板参数类型进行解释模板参数类型的命名空间
A point from ISO draft n3290 section 3.4.2 paragraph 1:
When the postfix-expression in a function call is an unqualified-id, other namespaces not considered during the usual unqualified lookup may be searched, and in those namespaces, namespace-scope friend function declarations not otherwise visible may be found. These modifications to the search depend on the types of the arguments (and for template template arguments, the namespace of the template argument).
Here they said aboout "these modifications to the search depend on the types of the arguments / template template arguments / namespace of the template argument " ...Can any one expalin with an example please? I tried with argumetn types..please expalin with template template argument types & namespace of the template argument type
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
考虑一个简单的非限定函数调用:
ADL 意味着不仅在封闭范围和调用所在的命名空间中查找 foo,而且还在 x< 类型的命名空间中查找/代码>。例如,如果
x
是std::vector
,则还会搜索命名空间std
。因此:可以,并且将调用 std::swap() 。
查找还取决于任何模板参数的命名空间,因此如果
x
是std::vector
则mynamespace
也包含在查找中。因此将调用
mynamespace::foo()
。最后,查找还扩展到用作模板模板参数的任何模板的名称空间。例如,
即使
wrapper
位于全局命名空间中,也会找到mynamespace::bar
,因为x
使用的模板模板参数是mynamespace::mytemplate
。Consider a simple unqualified function call:
ADL means that
foo
is looked up not just in the enclosing scope, and the namespace that the call is in, but also the namespace of the type ofx
. e.g. ifx
is astd::vector<int>
then namespacestd
is also searched. Thus:is OK, and will call
std::swap()
.The lookup also depends on the namespace of any template arguments too, so if
x
isstd::vector<mynamespace::myclass>
thenmynamespace
is also included in the lookup. Thuswill call
mynamespace::foo()
.Finally, the lookup also extends to the namespaces of any templates used as template template parameters. e.g.
Even though
wrapper
is in the global namespace,mynamespace::bar
will be found, because the template template parameter used forx
ismynamespace::mytemplate
.