【问题标题】:Type dependent template name键入依赖模板名称
【发布时间】:2018-03-13 19:36:19
【问题描述】:
#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 是一个从属名称,它的名称在实例化时应该是可见的。请告诉我我错过了什么?

【问题讨论】:

  • 您在声明或定义之前尝试使用g
  • 在模板前添加g声明。

标签: c++ templates


【解决方案1】:

实例化上下文中的查找仅考虑通过参数相关查找找到的候选者。由于int 没有关联的命名空间或类,因此该查找什么也找不到。

【讨论】:

  • 如果您再次使用手机,我认为 [temp.dep.res]/1 是相关部分。
【解决方案2】:

4.7 及更高版本的 GNU C++ 编译器不再执行它过去执行的一些额外的非限定查找,即依赖基类范围查找和非限定模板函数查找。 (Read more)

这可以通过使用 -fpermissive 临时解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2015-01-26
    • 2013-03-03
    • 2012-10-29
    相关资源
    最近更新 更多