Extern keyword with explicit template creation

Consider a small toned use case of my problem where I have a header like this

#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

      

and source file as

#include "Header.h"

int main()
{
    myfoo f;
    f.func();
    return 0;
}

      

When I compile this with VS 2015 (Update 3) I get the following warning

warning C4910: 'FOO<int>': '__declspec(dllexport)' and 'extern' are incompatible on an explicit instantiation

      

The MSDN page does not explain to me why it is wrong to have extern

and dllexport

in an explicit template declaration.

Can someone please explain what is the reason for this?

+3


source to share





All Articles