@@ -73,20 +73,31 @@ namespace xcpp
7373        xeus::register_interpreter (this );
7474    }
7575
76-     static  std::string get_stdopt (int  argc,  const   char *  const * argv )
76+     static  std::string get_stdopt ()
7777    {
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);
90101    }
91102
92103    interpreter::interpreter (int  argc, const  char * const * argv) :
@@ -98,7 +109,7 @@ namespace xcpp
98109    {
99110        // NOLINTNEXTLINE (cppcoreguidelines-pro-bounds-pointer-arithmetic)
100111        createInterpreter (Args (argv ? argv + 1  : argv, argv + argc));
101-         m_version = get_stdopt (argc, argv );
112+         m_version = get_stdopt ();
102113        redirect_output ();
103114        init_preamble ();
104115        init_magic ();
0 commit comments