Index: plugins/custom-definesandincludes/compilerprovider/gcclikecompiler.cpp =================================================================== --- plugins/custom-definesandincludes/compilerprovider/gcclikecompiler.cpp +++ plugins/custom-definesandincludes/compilerprovider/gcclikecompiler.cpp @@ -50,21 +50,23 @@ return QStringLiteral("-xcuda"); case Utils::ObjC: return QStringLiteral("-xobjective-c"); + case Utils::ObjCpp: + return QStringLiteral("-xobjective-c++"); default: Q_UNREACHABLE(); } } -QString languageStandard(const QString& arguments) +QString languageStandard(const QString& arguments, Utils::LanguageType type) { // TODO: handle -ansi flag: In C mode, this is equivalent to -std=c90. In C++ mode, it is equivalent to -std=c++98. const QRegularExpression regexp(QStringLiteral("-std=(\\S+)")); auto result = regexp.match(arguments); if (result.hasMatch()) return result.captured(0); // no -std= flag passed -> assume c++11 - return QStringLiteral("-std=c++11"); + return (type == Utils::Cpp || type == Utils::ObjCpp) ? QStringLiteral("-std=c++11") : QStringLiteral(""); } } @@ -87,7 +89,7 @@ // TODO: what about -mXXX or -target= flags, some of these change search paths/defines const QStringList compilerArguments{ languageOption(type), - languageStandard(arguments), + languageStandard(arguments, type), QStringLiteral("-dM"), QStringLiteral("-E"), QStringLiteral("-"), @@ -144,7 +146,7 @@ const QStringList compilerArguments{ languageOption(type), - languageStandard(arguments), + languageStandard(arguments, type), QStringLiteral("-E"), QStringLiteral("-v"), QStringLiteral("-"), Index: plugins/custom-definesandincludes/compilerprovider/icompiler.h =================================================================== --- plugins/custom-definesandincludes/compilerprovider/icompiler.h +++ plugins/custom-definesandincludes/compilerprovider/icompiler.h @@ -38,6 +38,7 @@ OpenCl, Cuda, ObjC, + ObjCpp, Other }; Index: plugins/custom-definesandincludes/compilerprovider/settingsmanager.cpp =================================================================== --- plugins/custom-definesandincludes/compilerprovider/settingsmanager.cpp +++ plugins/custom-definesandincludes/compilerprovider/settingsmanager.cpp @@ -71,7 +71,12 @@ return QStringLiteral("parserArgumentsOpenCL"); case Utils::Cuda: return QStringLiteral("parserArgumentsCuda"); + // TODO: is there a need for "parserArgumentsObjC[++]" and if so how/where + // if not, merge the ObjC cases with the C/C++ cases. case Utils::ObjC: + return QStringLiteral("parserArgumentsC"); + case Utils::ObjCpp: + return QStringLiteral("parserArguments"); case Utils::Other: break; } @@ -99,7 +104,8 @@ arguments[Utils::Cpp] = QStringLiteral("-ferror-limit=100 -fspell-checking -Wdocumentation -Wunused-parameter -Wunreachable-code -Wall -std=c++11"); arguments[Utils::OpenCl] = QStringLiteral("-ferror-limit=100 -fspell-checking -Wdocumentation -Wunused-parameter -Wunreachable-code -Wall -cl-std=CL1.1"); arguments[Utils::Cuda] = QStringLiteral("-ferror-limit=100 -fspell-checking -Wdocumentation -Wunused-parameter -Wunreachable-code -Wall -std=c++11"); - arguments[Utils::ObjC] = QStringLiteral("-ferror-limit=100 -fspell-checking -Wdocumentation -Wunused-parameter -Wunreachable-code -Wall -std=c99"); + arguments[Utils::ObjC] = QStringLiteral("-ferror-limit=100 -fspell-checking -Wdocumentation -Wunused-parameter -Wunreachable-code -Wall"); + arguments[Utils::ObjCpp] = arguments[Utils::Cpp]; arguments.parseAmbiguousAsCPP = true; return arguments; @@ -439,6 +445,10 @@ return Cpp; } + if (mimeType == QStringLiteral("text/x-objc++src")) { + return ObjCpp; + } + if (mimeType == QStringLiteral("text/x-objcsrc")) { return ObjC; } Index: plugins/custom-definesandincludes/kcm_widget/parserwidget.cpp =================================================================== --- plugins/custom-definesandincludes/kcm_widget/parserwidget.cpp +++ plugins/custom-definesandincludes/kcm_widget/parserwidget.cpp @@ -57,6 +57,8 @@ return QStringLiteral("c++11"); case Utils::ObjC: return QStringLiteral("c99"); + case Utils::ObjCpp: + return QStringLiteral("c++11"); case Utils::Other: break; }