类型依赖模板名称

Type dependent template name

本文关键字:依赖 类型      更新时间:2023-10-16
#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>    

上面的代码给出了编译错误"在此范围中没有声明" g",并且在实例化点上没有通过参数依赖的查找发现声明"。

由于g是一个因名称,因此在实例化时应可见其名称。请告诉我我想念什么?

实例化上下文中的查找仅考虑参数依赖性查找的候选者。由于int没有关联的命名空间或类,因此查找找不到。

GNU C 编译器从4.7版及更高版本开始,不再执行过去执行的一些额外的无限制查找,即依赖性基类范围范围查找和不合格的模板功能函数查找。(阅读更多)

这可以通过使用-fpermissive暂时处理。