我正在使用显式模板实例化。据我了解,由于我是在头文件中实例化的,因此以下示例应违反一个定义规则。但是我尝试过的单个编译器都没有问题。我想念什么?为什么这样做?并且保证可以在每个编译器上工作吗?
A.h:
#ifndef A_H
#define A_H
template<class T>
struct A
{
T x;
};
// instantiate
template struct A<int>;
template struct A<float>;
template struct A<double>;
#endif
file1.cpp:
#include "A.h"
A<int> f();
int main()
{
A<int> a = f();
}
file2.cpp:
#include "A.h"
A<int> f()
{
return A<int>();
}