[英]ADL, Ordinary lookup and Dependent function call not working oO
这里是简单的代码,应该按照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)的查找部分, 仅找到模板定义上下文中的函数声明。
我可能对所写的内容有错误的印象,有人可以在这里纠正我吗?
您应该将'bar'的声明移到顶部。 因为在定义模板(未实例化)时,在调用“bar”之前,尚未声明它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.