在下面的程序中,我们获取没有可用定义的函数模板的地址。
template <typename T>
void fun(T);
int main()
{
void (*funptr)(int) = fun;
}
我被告知编译器决定在获取地址时实例化一个函数模板,但是上面的程序编译得很好(当然链接器会抛出一个它找不到定义的错误fun
)。仅当我们使用显式实例化时编译才会失败:
template <typename T>
void fun(T);
template void fun<int>(int);
int main()
{}
这是否意味着只有编译第二个源代码才能实例化函数模板?或者它是否也在第一个实例化但我错过了一些东西?
提前致谢!