考虑我的问题的一个小调低用例,其中我有一个标题如下
#include <iostream>
#pragma once
#ifndef HEADER_H
#define HEADER_H
template<typename T>
class FOO
{
public:
void func() { std::cout << "Foo!"; };
};
extern template class __declspec(dllexport) FOO<int>;
using myfoo = FOO<int>;
#endif
和源文件
#include "Header.h"
int main()
{
myfoo f;
f.func();
return 0;
}
当我使用VS 2015(Update 3)编译时,我得到了warning
warning C4910: 'FOO<int>': '__declspec(dllexport)' and 'extern' are incompatible on an explicit instantiation
MSDN页面没有向我解释为什么在显式模板声明中使用extern
和dllexport
是错误的。
有人可以解释一下这背后的理由是什么?