Microsoft имеет расширение , благодаря чему можно объявить, что создание шаблона будет внешним;следовательно, он не становится неявным образом созданным.По крайней мере, это теория.Я попытался воспроизвести это с кодом
#include <vector>
class Foo{
int i;
public:
virtual ~Foo();
};
extern template class std::vector<Foo>;
Это дает мне
warning C4231: nonstandard extension used : 'extern' before template
explicit instantiation
Однако, похоже, больше ничего не происходит: программа продолжает искать ссылки, даже если я использую push_back (иdumpbin показывает, что был создан экземпляр push_back).
Только когда я объявляю
extern template void std::vector<Foo>::push_back(const Foo&);
Я получаю ошибку компоновщика, как и ожидалось.
Итак: как я могу объявить всю реализацию(все члены) как явные, предотвращающие неявную реализацию?