这里提供的简单代码应该符合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)的查找部分,仅找到模板定义上下文中的函数声明。
我可能对所写的内容有错误的印象,有人可以在这里纠正我吗?
答案 0 :(得分:0)
您应该将'bar'的声明移到顶部。因为在定义模板(未实例化)时,在调用'bar'之前,它尚未被声明。