Por que o "modelo externo" não funciona com shared_ptr?

Eu tive a ideia (aparentemente) brilhante de usarextern template class std::shared_ptr<SomeWidelyUsedClass> em stdafx.h imediatamente após#include <memory> para prevenirstd::shared_ptr<SomeWidelyUsedClass> de ser redundantemente instanciado em centenas de arquivos, imaginando que eu poderia colocartemplate class std::shared_ptr<SomeWidelyUsedClass> em um único .cpp para forçar uma única instanciação e, com sorte, economizar tempo de compilação / link. No entanto, o exame dos arquivos .cod e .obj resultantes mostra queshared_ptr<SomeWidelyUsedClass> código está sendo criado em qualquer lugar de qualquer maneira. Mas se eu usar exatamente essa mesma técnica com minha própria classe de modelo, ela funcionará conforme o esperado. Existe algo especial sobreshared_ptr que impede esse uso? Talvez algo em<memory> que força o compilador a criar uma instanciação antes que ela atinja meuextern template (tenho certeza de que não há nada mais alto no stdafx.h que faça uso deshared_ptr)?

Esclarecer:

// stdafx.h; included in every cpp in the project
#include <memory>
#include "SomeWidelyUsedClass.h" // no shared_ptr in here

// I expect this to prevent instantiation of std::shared_ptr<SomeWidelyUsedClass>
// in all compilation units that include this, except the one below.
extern template class std::shared_ptr<SomeWidelyUsedClass>;

Então:

// ExplicitTemplateInstantiations.cpp
#include "stdafx.h"

// I expect this to cause std::shared_ptr<SomeWidelyUsedClass>
// to be instantiated in this compilation unit
template class std::shared_ptr<SomeWidelyUsedClass>;

E:

// SomeOtherFile.cpp
#include "stdafx.h"
#include "SomeWidelyUsedClass.h"

void foo()
{
   // I expect that SomeOtherFile.obj will not include an instantiation of
   // std::shared_ptr<SomeWidelyUsedClass> since it was declared extern in stdafx.h
   std::shared_ptr<SomeWidelyUsedClass>(new SomeWidelyUsedClass());
}

questionAnswers(1)

yourAnswerToTheQuestion