26 std::ofstream out(tmp_file_in());
28 out <<
"#if defined(__clang_major__)\n"
29 "clang __clang_major__ __clang_minor__ __clang_patchlevel__\n"
30 "#elif defined(__BCC__)\n"
33 "gcc __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__\n"
35 "default_c_standard __STDC_VERSION__\n";
42 {executable,
"-E",
"-",
"-o",
"-"},
52 std::ifstream in(tmp_file_out());
55 while(!in.fail() && std::getline(in, line))
57 if(line.empty() || line[0] ==
'#')
66 else if(split[0] ==
"bcc")
68 else if(split[0] ==
"clang")
75 else if(split.size() == 2 && split[0] ==
"default_c_standard")
77 if(split[1] ==
"199901L")
79 else if(split[1] ==
"201112L")
94 std::ofstream out(cpp_in());
95 out <<
"default_cxx_standard __cplusplus\n";
100 {executable,
"-E",
"-x",
"c++",
"-",
"-o",
"-"},
107 std::ifstream in2(cpp_out());
109 while(!in2.fail() && std::getline(in2, line))
111 if(line.empty() || line[0] ==
'#')
116 if(split.size() == 2 && split[0] ==
"default_cxx_standard")
118 if(split[1] ==
"199711L")
120 else if(split[1] ==
"201103L")
122 else if(split[1] ==
"201402L")
134 unsigned _patchlevel)
const
156 const auto gcc_float128_minor_version =
163 gcc_version.
is_at_least(4u, gcc_float128_minor_version);