外部模板类 std::vector<FwdDecld>;

Ben*_*Ben 6 c++ language-lawyer

我有一个包含成员的班级std::vector<FwdDecl>。我想做

extern template class std::vector<FwdDecld>;
Run Code Online (Sandbox Code Playgroud)

在标题和

template class std::vector<FwdDecld>;
Run Code Online (Sandbox Code Playgroud)

所以.cpp我的类的特殊成员函数可以是自动的(而不是在 中声明所有六个.h=default在 中声明所有六个.cpp)。

这似乎适用于 MSVC 和 Apple Clang,但不适用于 Clang 或 GCC: https: //godbolt.org/z/Tc8G91rj6

不过,这适用于boost::container::vector: https: //godbolt.org/z/j6zfj4K3r

它是否正确?GCC 和 Clang 合规吗?是MSVC吗?

相关extern template class std::unique_ptr<FwdDecl>似乎确实有效(尽管显然它不可复制),即使前向声明的类是私有的: https: //godbolt.org/z/ThhW4fPGE