Hi everyone, I recently came across a linking error when using explicit template instantiation of a non-pure virtual class (see code below).
// TemplateVirtualClass.hpp #pragma once template <class T> class TemplateVirtualClass { public: TemplateVirtualClass() = default; TemplateVirtualClass(const TemplateVirtualClass& x) = default; TemplateVirtualClass(TemplateVirtualClass&& x) = default; virtual ~TemplateVirtualClass() = default; TemplateVirtualClass& operator=(const TemplateVirtualClass& x) = default; TemplateVirtualClass& operator=(TemplateVirtualClass&& x) = default; }; extern template class TemplateVirtualClass<int>; // TemplateVirtualClass.cpp #include "TemplateVirtualClass.hpp" template class TemplateVirtualClass<int>; // main.cpp #include "TemplateVirtualClass.hpp" int main(int argc, char** argv) { TemplateVirtualClass<int> tvc; return 0; }
When compiling with icpc 19 I have this error message:
icpcptdjtl.o:(.data._ZTV20TemplateVirtualClassIiE[_ZTV20TemplateVirtualClassIiE]+0x18): undefined reference to `TemplateVirtualClass<int>::~TemplateVirtualClass()'
Do you have any idea why ? It compiles with g++-7.