类型依赖模板名称
Type dependent template name
#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暂时处理。
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 当基类是依赖类型时,这是一个缺陷吗
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 为什么不需要在 C++20 中的依赖类型之前指定"typename"?
- 为什么在以下情况下不需要为依赖类型使用typename
- 提升multi_index获得依赖类型
- 继承依赖类型定义而不使用结构
- 依赖于依赖类型的非静态数据成员的非限定名称
- 依赖类型自动扣除
- 具有unordered_map的依赖类型
- 难以理解C++依赖类型与当前实例化上的内容
- 扣除其他类型的依赖类型
- C++:从依赖类型"Inferring"模板类型
- 编译器是否也将所有参数依赖类型实例化,即使超载函数的参数计数不匹配
- 限定依赖类型的类型定义
- 为什么对于依赖类型,单词 'typedef' 后面需要'typename'?
- 如何从模板化的类方法返回依赖类型
- 无法定义依赖类型定义的成员
- 如何在任意依赖类型上专门化模板
- 依赖类型不明确的 c++11 可变参数函数模板重载是否不明确