定义前显式实例化模板功能

时间:2019-06-15 18:05:03

标签: c++ c++11

如果首先进行声明,是否在模板函数的显式实例化之前允许使用该函数?

例如,允许以下内容:

// declaration
template <typename T>
void foo(T param);

// explicit instantiation
template void foo<int>(int);

// definition of primary template
template <typename T>
void foo(T param) {}

通常,它似乎可以编译,但是当然,这仅是关于是否允许它的温和指示。

1 个答案:

答案 0 :(得分:3)

[temp.explicit]中没有明确禁止它的内容。此外,还有一个明确的声明([temp.explicit#5]):

  

函数模板,变量模板,类模板的成员函数或静态数据成员的声明,或类或类模板的成员函数模板的声明应在该实体的显式实例化之前。

如果需要定义,则本段将有所不同(即,将需要定义),因此您的代码似乎合法。