我想知道这是否是一个有效的编译器错误,以及编译是否正确。 假设在头文件和cpp文件中定义了一个简单的模板类。
// MyVector.h
template<class T>
class MyVector
{
public:
MyVector() = default;
~MyVector() = default;
int function();
private :
T data;
};
// type alias
using MyVecD = MyVector<double>;
cpp文件还将包含典型类型的显式实例化。
// MyVector.cpp
#include "MyVector.h"
template<class T>
int MyVector<T>::function() { return data + 42; }
// explicit instantiation for double
template class MyVector<double>;
我原本预计类型别名会运行正常,但我不确定。
#include "MyVector.h"
// Suppresses implicit instantiation
// No problems here
extern template class MyVector<double>;
// This fails to compile in VS 2017
// extern template class MyVecD;
int main()
{
MyVecD test;
auto result = test.function();
return 0;
}
即使我不能在extern中使用类型别名,我怎么能确定编译器没有在这里实例化我的类型别名,并且实际上正在做正确的事情。