【发布时间】:2014-02-04 17:26:42
【问题描述】:
以下代码位于 .h 文件中(带有包含保护)
template<typename T1, typename T2> // a
void func(T1 const &t1, T2 const &t2)
{
std::cout << "\nbase template";
}
template<> // b
inline void func<int, int>(int const &t1, int const &t2)
{
std::cout << "\nspecialization for integers";
}
当从 (b) 中删除内联关键字时,以下代码(从包含 .h 的 .cpp 调用)将无法编译
func<int, int>(1, 2);
emmiting a linker error " error LNK2005: "void __cdecl func(int const &,int const &)" (??$func@HH@@YAXABH0@Z) 已在 ConsoleApplication1.obj 中定义"
为什么会这样?
编辑:
因此,既然它们是定义(由 Luchian Grigore 回答),显式特化是否意味着显式实例化,还是此编译器特定于?
【问题讨论】:
标签: c++