The standard says in §14.7.2/10:
Except for inline functions and class template specializations, explicit instantiation declarations have the effect of suppressing the implicit instantiation of the entity to which they refer.
I just checked in VS2013 and the implementation of std::shared_ptr<>
there has an inline constructor. This is probably the reason why your extern template
is ignored.