【发布时间】:2014-11-19 15:56:34
【问题描述】:
我知道编译器不会实例化未使用的模板函数,只要它们在类中不是虚拟函数。
在一个简单的情况下,如果我有两个重载的模板函数,它们都采用相同的模板参数,那么编译器似乎会实例化这两个重载。我想这是必需的,以便编译器可以执行重载解析?重载是否不受函数模板的惰性实例化规则的约束?我无法在标准中找到相关文本。这是一个例子:
template<typename T>
void foo(T) {zzz}
template<typename T>
void foo(T*) {}
int main()
{
int* blah;
foo(blah);
}
如果第一个重载没有实例化,我希望不会出现编译器错误,但是我得到了错误。
【问题讨论】:
-
你的问题到底是什么?
-
@belwood 引用:
Are overloads exempt from the lazy-instantiation rule for function templates? -
@belwood:他或她想要解释函数模板隐式实例化规则。
-
这不是严格意义上的语言律师问题,但它也适合标签,所以我添加了它。
标签: c++ language-lawyer