繁体   English   中英

ADL,普通查找和从属函数调用不起作用oO

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM