如果首先进行声明,是否在模板函数的显式实例化之前允许使用该函数?
例如,允许以下内容:
// 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) {}
通常,它似乎可以编译,但是当然,这仅是关于是否允许它的温和指示。
答案 0 :(得分:3)
[temp.explicit]中没有明确禁止它的内容。此外,还有一个明确的声明([temp.explicit#5]):
函数模板,变量模板,类模板的成员函数或静态数据成员的声明,或类或类模板的成员函数模板的声明应在该实体的显式实例化之前。
如果需要定义,则本段将有所不同(即,将需要定义),因此您的代码似乎合法。