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