显式模板实例化和一个定义规则

时间:2018-11-10 01:10:28

标签: c++ templates instantiation one-definition-rule

我正在使用显式模板实例化。据我了解,由于我是在头文件中实例化的,因此以下示例应违反一个定义规则。但是我尝试过的单个编译器都没有问题。我想念什么?为什么这样做?并且保证可以在每个编译器上工作吗?

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>();
}

0 个答案:

没有答案