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.