#include <iostream>
template<typename T>
void f(T x)
{
g(x); // g is a dependent name
};
void g(int a)
{
std::cout << a;
}
int main()
{
int a = 12;
f(a);
}
//this should be point of declaration for f<int>
上面的代码给出了编译错误&#34;'g'未在此范围内声明,并且在实例化时没有通过参数依赖查找找到声明&#34;。
由于g是从属名称,因此在实例化时它的名称应该是可见的。请告诉我缺少什么?
答案 0 :(得分:4)
实例化上下文中的查找仅考虑通过参数依赖查找找到的候选项。由于int
没有关联的命名空间或类,因此该查找没有找到任何内容。
答案 1 :(得分:0)
版本4.7及更高版本的GNU C ++编译器不再执行它过去执行的一些额外的非限定查找,即依赖基类范围查找和非限定模板函数查找。 (Read more)
这可以通过使用-fpermissive来暂时解决。