Ist das Standard-C++?



  • Hallo!

    Einfache Frage: Entspricht folgender Code Standard-C++?

    #include <fstream>
    
    using namespace std;
    
    int main(){
    
    	basic_ifstream<int> fs("file1.txt");
    	fs.close();
    	return 0;
    }
    

    Ich frage deshalb, weil er unter Windows mit dem VC++ Compiler problemlos kompiliert, der g++ unter Linux erzeugt aber massenhaft Linker-Errors. Ich finde dass es vollkommen gültiger Standard-C++ Code ist und daher auf jedem System und mit jedem Compiler funktionieren müsste.

    Wenn ich den basic_ifstream nicht mit dem Typ <int> sondern mit <char> erzeuge, dann kompiliert es. Kann es sein dass entweder der g++ einen Fehler hat oder der VC++ Compiler entwas unterstützt, das es laut Standard gar nicht dürfte?

    mfg



  • Comeau Compiler (online) compiliert es nicht. => Nicht standardkonform. 😉



  • Und warum nicht?

    Das Template basic_ifstream erwartet doch als Template-Parameter eine Angabe darüber, welcher Typ gelesen werden soll. Und ich will nun mal int lesen.

    Wie mache ich es sonst?

    Danke!

    mfg



  • Nunja afaik geht das nur mit char und wchar_t weil die Templates nur für diese Typen implemetniert sind. (Hoffe das stimmt soweit)



  • wenn du ihm weismachen kannst dass int ein zeichentyp ist, dann kriegst dus vielleicht hin.
    du müsstest ihm noch eine traits-klasse für ints anbieten. viel spaß beim implementieren 😉

    @comeau: wenn irgendein compiler etwas nicht übersetzt heiß es nicht, dass der code kein standard ist. Afaik gibts noch keinen Compiler der ALLES aus dem Standard auch annimmt...



  • klar. aber wenns comeau nicht nimmt kann man sich schon sehr sehr sicher sein. 😉



  • comeau schrieb:

    klar. aber wenns comeau nicht nimmt kann man sich schon sehr sehr sicher sein. 😉

    Der neue VC++ hat beim boost-test ja wohl extrem besser abgeschnitten als dein bracker comeau



  • asldjkfasöldjkf schrieb:

    comeau schrieb:

    klar. aber wenns comeau nicht nimmt kann man sich schon sehr sehr sicher sein. 😉

    Der neue VC++ hat beim boost-test ja wohl extrem besser abgeschnitten als dein bracker comeau

    vielleicht hält sich boost ja nicht an den standard 😉



  • Ok, und welche Alternative zum Einlesen eines int (und anderen numerischen Datentypen) gibt es, die auch dem Standard entsprechen (sollten zumindest mit VC++ und g++ kompilieren)?

    mfg



  • ifstream fs("file1.txt");

    int i;
    fs >> i;



  • Wenn du noch an deinem basic_ifstream<int> hängst: Spezialisiere einfach char_traits<> für int. Wie das geht, kannst du im Standard unter 21.1 nachlesen.

    [EDIT] Mir ist klar, dass ich damit Sachen wiederhole, es ist aber vorher IMHO noch nicht richtig rausgekommen.


Anmelden zum Antworten