ADL 不考虑与模板参数关联的命名空间吗?
Doesn't ADL considers namespaces associated with template argument?
考虑一下简单的代码:
template<int N> struct foo{};
namespace N
{
const int a=1;
void bar(foo<1>& x){}
}
int main()
{
bar(foo<N::a>());
return 0;
}
代码不应该工作吗?为什么它不起作用我想知道。感谢
[basic.lookup.argdep]/2:
[注意:非类型模板参数对相关名称空间集没有贡献。--结束注释]
对于注释中链接的代码,命名空间中的typedef也不够,但还有其他原因。查找基于解析的类型,而不是基于包含typedef
本身(或者等效地,using
)的命名空间。
例如,如果您有以下代码:
namespace A {
class T {};
}
namespace B {
typedef A::T TT;
}
使用B::TT
作为参数会将namespace A
添加到查找,但不会将namespace B
添加到查找。
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- MISRA C++规则 14-5-1:在与类型关联的命名空间中声明的泛型函数模板的名称
- 将 POSIX::open 函数关联到命名空间
- 在C API中定义了一个类型,如何将其与命名空间中的C++类相关联
- ADL 不考虑与模板参数关联的命名空间吗?
- C++运算符重载和关联的命名空间