diff options
Diffstat (limited to 'src/plugins/cpptools/compileroptionsbuilder.cpp')
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 6de6a44d5d..5b17628682 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -283,6 +283,55 @@ void CompilerOptionsBuilder::addMsvcCompatibilityVersion() } } +static QStringList languageFeatureMacros() +{ + // Collected with: + // $ CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 + // $ D:\usr\llvm-3.8.0\bin\clang++.exe -fms-compatibility-version=19 -std=c++1y -dM -E D:\empty.cpp | grep __cpp_ + static QStringList macros { + QLatin1String("__cpp_aggregate_nsdmi"), + QLatin1String("__cpp_alias_templates"), + QLatin1String("__cpp_attributes"), + QLatin1String("__cpp_binary_literals"), + QLatin1String("__cpp_constexpr"), + QLatin1String("__cpp_decltype"), + QLatin1String("__cpp_decltype_auto"), + QLatin1String("__cpp_delegating_constructors"), + QLatin1String("__cpp_digit_separators"), + QLatin1String("__cpp_generic_lambdas"), + QLatin1String("__cpp_inheriting_constructors"), + QLatin1String("__cpp_init_captures"), + QLatin1String("__cpp_initializer_lists"), + QLatin1String("__cpp_lambdas"), + QLatin1String("__cpp_nsdmi"), + QLatin1String("__cpp_range_based_for"), + QLatin1String("__cpp_raw_strings"), + QLatin1String("__cpp_ref_qualifiers"), + QLatin1String("__cpp_return_type_deduction"), + QLatin1String("__cpp_rtti"), + QLatin1String("__cpp_rvalue_references"), + QLatin1String("__cpp_static_assert"), + QLatin1String("__cpp_unicode_characters"), + QLatin1String("__cpp_unicode_literals"), + QLatin1String("__cpp_user_defined_literals"), + QLatin1String("__cpp_variable_templates"), + QLatin1String("__cpp_variadic_templates"), + }; + + return macros; +} + +void CompilerOptionsBuilder::undefineCppLanguageFeatureMacrosForMsvc2015() +{ + if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID + && m_projectPart.isMsvc2015Toolchain) { + // Undefine the language feature macros that are pre-defined in clang-cl 3.8.0, + // but not in MSVC2015's cl.exe. + foreach (const QString ¯oName, languageFeatureMacros()) + m_options.append(QLatin1String("/U") + macroName); + } +} + QString CompilerOptionsBuilder::includeOption() const { return QLatin1String("-I"); |