Czy w Visual C ++ istnieje błąd z szablonem extern?

Biorąc pod uwagę ten kod:

//header.h
template <class T>
class Foo
{
public:
  Foo(T t) : t(t) {}
  T t;
};

//source1.cpp:
#include "header.h"
extern template class Foo<int>;
int main()
{
  Foo<int> f(42);
}

Według mojego zrozumienia ten program nie powinien łączyć się, ponieważ nie powinno być definicjiclass Foo<int> gdziekolwiek (extern template powinien temu zapobiec). Dzięki VC ++ 11 (Visual Studio 2012) kompiluje się i łączy. W GCC nie:

source1.cpp:(.text+0x15): undefined reference to `Foo<int>::Foo(int)'

Jeśli jednak połączę z source2.cpp, to działa (jak się spodziewam powinienem):

#include "header.h"
template class Foo<int>;

Zgodnie z tym postem na blogu szablon extern powinien być obsługiwany od wersji VC10.http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx

Na marginesie: czy istnieje sposób na wyświetlenie nazw w pliku obiektowym w systemie Windows / Visual Studio? W Linuksie zrobiłbym:

$ nm source1.o
U _ZN3FooIiEC1Ei      <- "U" means that this symbol is undefined.
0000000000000000 T main

questionAnswers(1)

yourAnswerToTheQuestion