C++ 11 - использование шаблонов extern для сокращения времени компиляции

Возможный дубликат:
Есть ли ошибка с внешним шаблоном в Visual C++?

Я использую что-то подобное в VS12 в файле *.cpp

    extern template class std::vector<int>;
... at some point here I need to instantiate vector on int
    std::vector<int> v1; // would not expect this to be instantiated here as I already have a *.cpp where I instantiate this *only once* for all project uses

В отдельном *.cpp я хочу создать экземпляры всех часто используемых экземпляров шаблона.

#include "stdafx.h"

template class std::vector<int>;
template class std::list<int>;
template class std::list<long>;
template class std::list<short>;
template class std::list<long long>;
template class std::list<unsigned int>;

То, как я знаю, что вектор создается в первом файле *.cpp, также связано с тем, что я получаю то же время компиляции с объявлением extern, что и без него (на самом деле я объявляю больше типов extern, поэтому я могу быть уверен, что тайминги достаточно велики, чтобы увидеть разницу)

Вопрос: Почему он не создает экземпляр std::vector только в отдельном файле *.cpp?

ИЗМЕНИТЬ Если в том же файле *.cpp у меня есть

extern template class std::list<int>;

void somefunc()
{
   std::list<int> v1;
}

Я не получаю ошибку лайкера, даже если я явно не создаю экземпляр std::list в другом файле cpp. Это могло бы объяснить тот факт, что фактически это создается, даже если я указываю extern. Интересно, почему это. Я хочу создать экземпляр std::list в одной точке.


person Gmt    schedule 28.11.2012    source источник
comment
@PeteBecker спасибо, что указали на это. Исправленный :-)   -  person Gmt    schedule 29.11.2012
comment
Визуальный С++? Вероятно, ошибка компилятора.   -  person Xeo    schedule 29.11.2012
comment
@ bames53 Да, используя простой класс шаблона, в котором вещи определяются вне объявления класса, я получаю ошибки компоновщика, как и ожидалось. Мне трудно использовать метод списка, например, который не встроен (определяется при выполнении объявления), чтобы увидеть ошибку компоновщика и в этом случае. Вы можете опубликовать ответ, чтобы получить кредит. Спасибо.   -  person Gmt    schedule 29.11.2012