使用基本和用户定义类型的名称查找麻烦

name lookup troubles with fundamental and user defined types

本文关键字:查找 找麻烦 类型 定义 用户      更新时间:2023-10-16

此编译:

struct type{};
template<typename T>
void foo(T in) { bar(in, type()); }
void bar(int, const type&) {}
int main() { foo(42); }

这不是(正如我从今天开始的上一个问题中学到的那样):

template<typename T>
void foo(T in) { bar(in); }
void bar(int) {}
int main() { foo(42); }

是第一个摘要也用ADL解释的原因吗?如果是这样,如何?

模板参数是一种基本类型,ADL不应该适用...为什么使用type类型会有所不同?

,尽管在您的具体专业化中, in是基本类型,但 bar仍然是一个依赖的名称,因此其查找的参数依赖部分是在实例化上下文中执行的。使其依赖的论点没有相关名称空间的事实是无关紧要的。所有非依赖性参数仍然有助于相关的名称空间和类。