Compilerweiche C++-Standard
-
kann ich im Quellcode rausfinden, mit welchem Standard kompiliert wird und diese Information im Sinne einer Compilerweiche einsetzen um Quellcode im Stil von "#ifdef" oder ähnlich vom kompiliervorgang auszuschließen?
Der Hintergrund ist folgender:
Ein Kollege hat ein Feature für C++11 nachgebaut, was aber ab C++14 im Standard ist. Nun kompiliere ich aber mit c++17 und will diesen nachgebauten Quellcode nicht kompilieren, da ich natürlich das Original aus dem Standard einsetzen will und die diversen Fehlermeldungen a la " is already declared in this scope" natürlich umgehen will.
-
Es gibt verschiedene vordefinierte Makros, u.a. für die Verson und für Features, da kannst du dir was raus suchen: https://en.cppreference.com/w/cpp/preprocessor/replace#.23define_directives
-
Habe das Macro
__cplusplus
ausprobiert. Aber:__cplusplus 199711
Was laut Link vom vorherigen Post für C++ vor C++11 steht. Ich glaube aber msvc verwendet automatisch mindestens C++11, dann sollte dort doch mindestens
201103L
stehen?Edit: Ah, msvc incorrectly defines cplusplus, werde das durchlesen.
-
Das sollte es eigentlich erklären:
https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
-
Habe
if(MSVC) add_compile_options(/Zc:__cplusplus) endif()
CMakeLists.txt hinzugefügt. Jetzt zeigt es
__cplusplus 201402
an, was C++14 entsprechen sollte.
-
@Hubert-Alfonsius danke, hat mir geholfen
#if __cplusplus <= 201103L // Bis einschließlich C++11 #else // Ab C++14 #endif
Getestet mit mingw7.30-64bit.