std :: unique_ptr pimpl na dll gera C4251 com o visual studio

Esse não é um problema de última hora, mas eu gosto de limpar meu código de avisos, de modo que isso está me dando nos nervos.

Eu tenho usado a versão c ++ 11 do idioma pimpl para ocultar a implementação de classe da minha biblioteca da maneira usual.

// dll header
class FrameworkImpl;

class EXPORT_API Framework
{
    Framework(const Framework&) = delete;
    Framework& operator=(const Framework&) = delete;
    Framework(Framework&&) = delete;
    Framework& operator=(Framework&&) = delete;

public:
    Framework();
    ~Framework();

private:
    std::unique_ptr<FrameworkImpl> impl_;
};

// application implementation
int main()
{
    std::unique_ptr<Framework> test = std::make_unique<Framework>();
}

Tudo vai ficar bem, mas continuarei recebendo o aviso:

warning C4251: 'Framework::impl_': class 'std::unique_ptr<FrameworkImpl,std::default_delete<_Ty>>' needs to have dll-interface to be used by clients of class 'Framework'

Então eu tentei adicionar:

template class EXPORT_API std::unique_ptr<FrameworkImpl>;

Antes da declaração de encaminhamento, mas o aviso mudaria apenas para:

warning C4251: 'std::_Unique_ptr_base<_Ty,_Dx>::_Mypair': class 'std::_Compressed_pair<_Dx,FrameworkImpl *,true>' needs to have dll-interface to be used by clients of class 'std::_Unique_ptr_base<_Ty,_Dx>'

Estou vendo esse problema desde o VS2010 e não consigo encontrar uma boa maneira de corrigir isso. Sem problemas no gcc ou no clang, e seria muito triste usar a versão antiga do ponteiro bruto.

questionAnswers(3)

yourAnswerToTheQuestion