这是给出的简单代码,我相信它应该可以根据 c++ 标准工作:
template<typename T>
void foo(T x)
{
bar(x);
void bar(int);
}
void bar(int) { }
int main()
{
foo(0);
}
错误来自 GCC 4.7:
'bar' 未在此范围内声明,并且在实例化点通过依赖于参数的查找未找到任何声明
但是在 C++ 标准中它是写的。§ 14.6.4.2:
对于依赖于模板参数的函数调用,使用通常的查找规则(3.4.1、3.4.2、3.4.3)找到候选函数,除了:
— 对于使用非限定名称查找 (3.4.1)或限定名称查找 (3.4.3) 的查找部分,仅找到来自模板定义上下文的函数声明。
我可能对写的内容有错误的印象,有人可以在这里纠正我吗?