diff options
Diffstat (limited to 'src/plugins/cpptools/compileroptionsbuilder.cpp')
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 09291830b3..7ee9b6bdf8 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -478,7 +478,10 @@ void CompilerOptionsBuilder::addLanguageVersionAndExtensions() case LanguageVersion::CXX17: option = "/std:c++17"; break; - case LanguageVersion::CXX2a: + case LanguageVersion::CXX20: + option = "/std:c++20"; + break; + case LanguageVersion::CXX2b: option = "/std:c++latest"; break; } @@ -523,8 +526,11 @@ void CompilerOptionsBuilder::addLanguageVersionAndExtensions() case LanguageVersion::CXX17: option = (gnuExtensions ? QLatin1String("-std=gnu++17") : QLatin1String("-std=c++17")); break; - case LanguageVersion::CXX2a: - option = (gnuExtensions ? QLatin1String("-std=gnu++2a") : QLatin1String("-std=c++2a")); + case LanguageVersion::CXX20: + option = (gnuExtensions ? QLatin1String("-std=gnu++20") : QLatin1String("-std=c++20")); + break; + case LanguageVersion::CXX2b: + option = (gnuExtensions ? QLatin1String("-std=gnu++2b") : QLatin1String("-std=c++2b")); break; case LanguageVersion::None: break; @@ -874,6 +880,14 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() theOption[0] = '-'; } + // Clang-cl (as of Clang 12) frontend doesn't know about -std:c++20 + // but the clang front end knows about -std=c++20 + // https://github.com/llvm/llvm-project/blob/release/12.x/clang/lib/Driver/ToolChains/Clang.cpp#L5855 + if (toolChain == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID || + toolChain == ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) { + theOption.replace("-std:c++20", "-clang:-std=c++20"); + } + m_compilerFlags.flags.append(theOption); } |