Ich versuche, die Version libstdc++
zu testen, weil std::regex
is implemented, but largely broken, in den Versionen von libstdc++
mit GCC vor Version 4.9.0 verteilt.Wie kann ich die Version von libstdC++, nicht GCC, zur Kompilierzeit testen?
Beachten Sie, dass:
ich die Version von
libstdc++
testen müssen, nicht GCC weil Clang unterstützt auchlibstdc++
als Standard-Bibliothek. Dies schließt testing the__GNUC_PATCHLEVEL__
,__GNUC__
, and__GNUC_MINOR__
macros aus.Die
__GLIBCXX__
Makro ist ein Datum, keine Versionsnummer und does not increase monotonically. Zum Beispiel wird GCC 4.8.4 mit#define __GLIBCXX__ 20150426
ausgeliefert, was neuer ist als das Release-Datum von GCC 4.9.0.
Gibt es eine portable Möglichkeit, die Version von libstdc++
zu testen, die nicht zur Verwendung von GCC meinen Compiler abhängt?
Wenn Sie wissen, dass es bei einer bestimmten Version kaputt ist, dann ist es testet seine gebrochen, um zu sehen, ob, wenn ja, dann haben Sie die gebrochene Version haben, wenn nicht, dann haben Sie die Arbeitsversion. – ydobonebi
In der Praxis besteht der beste Weg, eine Version zu ermitteln, in der keine Version angegeben ist, darin, gegen bekannte Verhaltensweisen zu testen. Ich wollte das nur klären. Abgesehen davon, mit welchem OS arbeiten Sie? Ich überprüfe Fenster, wenn ich meine Ersonnummern bestimmen kann oder nicht ... – ydobonebi
Quinn Roundy: Ich würde es vorziehen, die Version tatsächlich zu testen. Der Fehler tritt nur zur Laufzeit auf, daher müsste ich ein Testprogramm als Teil meines Build-Prozesses kompilieren (und ausführen). Dies könnte möglicherweise beim Cross-Compilieren brechen. –