Parametername einer Methode == Name einer Templateklasse



  • Hy!

    Ich habe ein Problem mit folgendem Code:

    namespace Test {
    	template <long l> class foo { };
    
    	void Func(int& foo);
    }
    
    void Test::Func(int& foo) {
    }
    
    int main() { }
    

    Dort will ich den Namen der Template-Klasse (foo) als Parameternamen für die Methode Func benutzen.

    Der Comeau Compiler und der g++ 3.2 compilieren den Code anstandslos, doch Microsoft Visual C++ 7.1 meint:

    error C2955: 'Test::foo': für die Verwendung einer Vorlagenklasse ist eine Vorlagen-Argumentliste erforderlich

    Wenn ich allerdings
    - den Namespace ganz entferne
    - oder die Implementation der Methode direkt in den Namespace schreibe
    - oder den Integer per Value, statt per Referenz übergebe

    dann funktioniert es wieder. 😮

    Wie ist das zu erklären? Ein Bug?

    cu



  • Mit der Bezeichnung "Bug" wäre ich da vorsichtig. Du musst bedenken vc++ ist in Details != Ansi c++



  • Ich dachte der 2003er soll so standardkonform sein. Und dann hat es schon Probleme mit den einfachsten Sachen. *g*


Anmelden zum Antworten