Gibt es einen Fehler mit externer Vorlage in Visual C ++?

Gegeben diesen Code:

//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);
}

Nach meinem Verständnis sollte dieses Programm nicht verknüpfen, da es keine Definition von geben sollteclass Foo<int> irgendwo (extern template sollte dies verhindern). Mit VC ++ 11 (Visual Studio 2012) wird dies jedoch kompiliert und verknüpft. In GCC gilt Folgendes nicht:

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

Wenn ich mich jedoch mit source2.cpp verbinde, funktioniert es (wie ich es erwartet habe):

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

Laut diesem Blogbeitrag sollte das externe Template seit VC10 unterstützt werden.http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx

Gibt es eine Möglichkeit, die Namen in einer Objektdatei unter Windows / Visual Studio aufzulisten? Unter Linux würde ich Folgendes tun:

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage