@@ -73,20 +73,31 @@ namespace xcpp
73
73
xeus::register_interpreter (this );
74
74
}
75
75
76
- static std::string get_stdopt (int argc, const char * const * argv )
76
+ static std::string get_stdopt ()
77
77
{
78
- std::string res = " 14" ;
79
- for (int i = 0 ; i < argc; ++i)
80
- {
81
- std::string arg (argv[i]);
82
- auto pos = arg.find (" -std=c++" );
83
- if (pos != std::string::npos)
84
- {
85
- res = arg.substr (pos + 8 );
86
- break ;
87
- }
88
- }
89
- return res;
78
+ // We need to find what's the C++ version the interpreter runs with.
79
+ const char * code = R"(
80
+ int __get_cxx_version () {
81
+ #if __cplusplus > 202302L
82
+ return 26;
83
+ #elif __cplusplus > 202002L
84
+ return 23;
85
+ #elif __cplusplus > 201703L
86
+ return 20;
87
+ #elif __cplusplus > 201402L
88
+ return 17;
89
+ #elif __cplusplus > 201103L || (defined(_WIN32) && _MSC_VER >= 1900)
90
+ return 14;
91
+ #elif __cplusplus >= 201103L
92
+ return 11;
93
+ #else
94
+ return 0;
95
+ #endif
96
+ }
97
+ __get_cxx_version ()
98
+ )" ;
99
+ auto cxx_version = Cpp::Evaluate (code);
100
+ return std::to_string (cxx_version);
90
101
}
91
102
92
103
interpreter::interpreter (int argc, const char * const * argv) :
@@ -98,7 +109,7 @@ namespace xcpp
98
109
{
99
110
// NOLINTNEXTLINE (cppcoreguidelines-pro-bounds-pointer-arithmetic)
100
111
createInterpreter (Args (argv ? argv + 1 : argv, argv + argc));
101
- m_version = get_stdopt (argc, argv );
112
+ m_version = get_stdopt ();
102
113
redirect_output ();
103
114
init_preamble ();
104
115
init_magic ();
0 commit comments