Templates mit Leerzeichen bei >>



  • Guten Morgen,

    wenn ich bei C++ eine geschachtelte Parametrisierung hab, wird bei den schließenden Klammern ein > > erwartet, da er es sonst als Shift-Operator >> erkennt oder? Ich habe nun das selbe mal in Java getestet. Hier funktioniert es auch ohne Leerzeichen. Ich frage hier nun rein aus Interesse, warum Java ohne Leerzeichen klar kommt. Schließlich muss javac die Datei genauso in Tokens zerlegen. Hat hierfür jemand eine Begründung?

    Viele Grüße



  • Puh, Begründung. Man hat wohl beim "Erfinden" der Templates nicht direkt dran gedacht, dass so viel so wild geschachtelt werden wird. Ab 0x brauchste in C++ auch kein Leerzeichen mehr. 😉



  • Der Unterschied liegt daran, dass ein >> als Shift-Operator in C++98 Teil eines Templateparameters sein kann

    template<int> class foo;
    typedef foo<256>>2> foo64;
    

    weil in C++ auch nicht-Typ Templateparameter zugelassen sind. In Java beschränkt sich das mit den Generics auf Klassentypen. Das Beispiel erfordert jetzt in C++0x eine Klammerung:

    template<int> class foo;
    typedef foo<(256>>2)> foo64;
    

    kk



  • Danke, klingt einleuchtend :).



  • Aber jeder vernünftige C++ Compiler kann das doch schon seit Jahren verstehen.



  • Der GCC nicht..



  • Artchi schrieb:

    Aber jeder vernünftige C++ Compiler kann das doch schon seit Jahren verstehen.

    Definiere vernünftig. Einige (aber eben nicht alle) Compiler sind da nachsichtig und erlauben Code, der nicht standardkonform ist und eigentlich einen Fehler hervorrufen sollte. Sie lassen daher Code zu, der an nicht sehr offensichtlichen Stellen nicht portabel ist. Ob das als vernünftig zu bezeichnen ist, ist imo Geschmackssache 😉



  • theliquidwave schrieb:

    Der GCC nicht..

    Klar, du musst nur den richtigen Standard wählen: -std=c++0x


Anmelden zum Antworten