Betrachten Sie den folgenden Code ein:Gelöschte Konstruktor - MSVC meldet einen Fehler, Clang nicht
class SILPassPipelinePlan final {
public:
SILPassPipelinePlan() = default;
~SILPassPipelinePlan() = default;
SILPassPipelinePlan(const SILPassPipelinePlan &) = default;
SILPassPipelinePlan(SILPassPipelinePlan &&) = delete;
SILPassPipelinePlan x() {
SILPassPipelinePlan P;
return P;
}
};
int main() {
return 0;
}
MSVC meldet den folgenden Fehler:
1>consoleapplication2.cpp(13): error C2280: 'SILPassPipelinePlan::SILPassPipelinePlan(SILPassPipelinePlan &&)': attempting to reference a deleted function
1>consoleapplication2.cpp(8): note: see declaration of 'SILPassPipelinePlan::SILPassPipelinePlan'
Clang und GCC nicht.
Aus Sicht der Spezifikation, welcher Compiler ist korrekt? Ist das ein MSVC-Bug oder ein Clang-Bug?
MSVC stammt aus dem neuesten Visual Studio 2015 Update 3, Clang ist Version 3.9.0.
Welche '-std'-Flagge übergeben Sie an Clang und GCC? Die Löschung von Move-Konstruktoren hat wichtige Änderungen zwischen C++ 11 und C++ 14 erfahren. – Angew
@Angew. Keine spezifischen Flags. Probieren Sie es hier aus: http://rexttester.com/WJMW74714 –
Basierend auf diesem Rextester-Link verwenden Sie '-std = C++ 14'. Sie sollten diese Informationen zu der Frage hinzufügen. – Angew