c++ - 顶级命名空间中类的参数依赖查找?

标签 c++ c++03 argument-dependent-lookup

由于历史原因,我有一个位于顶级命名空间中的类。我需要为其定义一个函数,该函数必须使用依赖于参数的查找找到1。顶级命名空间是否被视为此类的关联命名空间,还是我必须采取一些解决方法?

1否则使用它的模板可能找不到它,因为模板后定义的符号只有在 ADL 找到时才能看到。

最佳答案

全局命名空间在这方面并不特殊,它的工作方式与任何其他命名空间一样,因此非常适合您的用例。

Live example 1全局命名空间的工作。

Live example 2 ADL 实际上是 #1 起作用的原因1

这是实例的文本:

#include <iostream>

struct X {};

template <class T>
void bar(T t)
{
  foo(t);
}

void foo(X x)
{
  std::cout << "Foo\n";
}

int main()
{
  X x;
  bar(x);
}

1 这会失败,因为 ADL 找不到该函数,而正常查找会。因此,它证明 #1 确实有效,这要归功于 ADL。

关于c++ - 顶级命名空间中类的参数依赖查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23603576/

相关文章:

c++ - 使用 C++ 和标准 C 库以异步方式实现套接字连接读取超时处理的最佳方法

除非遇到换行符,否则 c++ 不会写入控制台

C++,set_terminate 是每个线程的本地吗?

c++ - "potentially-evaluated"是否与 C++03 中的 "odr-used"相同?

c++ - 模板类型的 ADL 和友元函数

c++ - 程序忽略第二个循环

c++ - 不使用 "this"处理当前窗口?

c++ - 为什么我不能使用 make_pair 来绑定(bind)?

c++ - 依赖于参数的查找——何时完成,搜索什么,以及如何强制(或阻止)它?

c++ - ADL 不考虑与模板参数关联的 namespace 吗?