_HAS_CXX17 für Mingw bzw. gcc
-
Hallo,
für VisualStudio 2017 habe ich das Macro _HAS_CXX17 um zu ermitteln, ob der C++17 Support eingeschaltet ist.
Ich suche nun schon seit Stunden eine Möglichkeit, selbiges in mingw bzw. gcc zu finden. Also die Auskunft, ob ich mittels -std=c++17 den Support für C++17 angeschaltet habe.Hat da jemand eine Lösung?
Mit freundlichen Grüßen
Helmut
-
Laut Standard muss das eigentlich im Makro
__cplusplus
stehen. Siehe hier: https://en.cppreference.com/w/cpp/preprocessor/replace#Predefined_macros
Ob das nun wirklich von allen Compilern korrekt implementiert ist, habe ich nie getestet.
-
Danke!
-
@SeppJ sagte in _HAS_CXX17 für Mingw bzw. gcc:
Ob das nun wirklich von allen Compilern korrekt implementiert ist, habe ich nie getestet.
Bei MSVC muss man nen Switch mitgeben damit er
__cplusplus
> C++98 definiert
-
@hustbaer sagte in _HAS_CXX17 für Mingw bzw. gcc:
Bei MSVC muss man nen Switch mitgeben damit er
__cplusplus
> C++98 definiertDann mag jemand Interessiertes hier mit herumspielen:
https://godbolt.org/z/hPEjdr
GCC und CLang halten sich offenbar dran. Bei MSVC weiß ich jetzt halt nicht einmal den Schalter, um überhaupt den Standard umzuschalten, geschweige denn den Schalter, von dem hustbaer spricht.
-
Ein ehemaliger Benutzer 19. Sept. 2019, 13:39 zuletzt editiert von Ein ehemaliger Benutzer 19. Sept. 2019, 13:43
@SeppJ sagte in _HAS_CXX17 für Mingw bzw. gcc:
Bei MSVC weiß ich jetzt halt nicht einmal den Schalter, um überhaupt den Standard umzuschalten, geschweige denn den Schalter, von dem hustbaer spricht.
/std:c++latest, /std:c++14, /std:c++17
/Zc:__cplusplus
Siehe auch https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
-
Hab es erstmal so gelöst:
#if defined(_MSC_VER) #if _HAS_CXX17 #include <filesystem> namespace fs = std::filesystem; #define __HAS_FILESYSTE #endif // _HAS_CXX17 #elif defined(__MINGW32__) || defined(__GNUC__) #if __cplusplus >= 201703L #include <experimental/filesystem> namespace fs = std::experimental::filesystem; #define __HAS_FILESYSTE #endif // __cplusplus >= 201703L #endif
Danke für Eure Infos, Gruß Helmut
ps. GNUC bin ich mir noch nicht sicher, probiere ich wahrscheinlich Sa. aus.