[C++/allg.]Instantiierung von friend Funktionen

Hallo !

Ich habe in grauer Vorzeit unter BC 3.1 eine Klasse XMatrix geschrieben, mit der sich Matrizenoperationen sehr elegant in C++ erledigen lassen. Da der Inhalt der Matrix frei waehlbar sein sollte, habe ich das ganze als Klassentemplate gestaltet. Hier ein winziger Auszug aus dem Header:

template class XMatrix
{
 private:
 ...
 public:
 ...
 XMatrix operator \* (type) const; //XMatrix mal Konstante
 friend XMatrix operator \* (const type&,XMatrix&amp:wink:; //Konstante \* XMatrix
 ...
};

template class XMatrix ;
template class XMatrix ;
template class XMatrix ;

Zu sehen sind die Operatorueberladungen fuer Matrix mal type als Memberfunktion und fuer type mal Matrix (geht nicht als Member-> deshalb als friend Funktion)
Am Ende des Headers mache ich eine explicite Instantiierung der Klasse fuer die Datentypen float, complex und double. Das ganze wird noch von verschiedenen Macros gesteuert, um keine Instantierung in mehreren Dateien zu bekommen.
Nun mein Problem:
Der beschriebene Code laeuft unter Borland 3.1 und Borland 5.0 ohne Probleme. Wenn ich in die *.obj Datei schaue, finde ich alle Memberfunktionen und alle Friendfunktionen fuer alle Datentypen kompiliert.
Unter VC++ 6.0 und unter GNU kriege ich ein Problem. Hier werden zwar auch alle Instanzen aller Memberfunktionen angelegt aber keine Instanzen der friend - Funktionen erzeugt. Das bringt mir dann natuerlich Linkerfehler, wenn ich diese Funktionen benutzen will. Jetzt habe ich versucht die friend Funktionen auch explizit zu instantiieren. Da habe ich aber keine korrekte Syntax gefunden, weil ich ja zwei variable typen im Template habe (type -> des Scalars der mit der Matrix multipliziert werden soll; type der Matrix)
Kennt jemand die korrekte Schreibweise fuer mein Problem ? Was sagt der der C++ Standard dazu ?

Andreas

*der seine Klasse auch unter GNU und VC++ vollstaendig nutzen will*