关于模板实例化的几个问题
1:在c++ primer3 423页说:在显示实例化声明所在的文件中,函数模板的定义必须被给出。
我写了下面的代码:
//model.h
template<class T>
T sum_T(T a,T b){return 0;}
//main.cpp
#include "model.h"
//explicit instantiation declare
template int* sum_T<int*>(int* ,int*);
int main(){return 0;}
模板函数定义在头文件里,按它的说法,int显示实例化出现在main.cpp里,应该会编译错误的,但是编译通过没警告。
2:同样在这页,说:对于给定的函数模板实例,显式实例化声明在一个程序中只能出现一次。我又加上一个other.cpp
//other.cpp
#include "model.h"
template int* sum_T<int*>(int* ,int*);
和main.cpp里的已经重复了,但是编译链接都没有错误。甚至在main.cpp里直接再加上一个template int* sum_T<int*>(int* ,int*);也不会有问题。
3.另外请教一下,template int* sum_T<int*>(int* ,int*);
如果写成
template int* sum_T(int* ,int*);
template int* sum_T<int*>(int*);
template int* sum_T();
template int* sum_T<int*>();
编译都没错误,警告说
no function template defined that matches forced instantiation
这会导致出什么问题么?