Ich habe eine Klasse, die diese öffentliche Methode erklärt:C++ 11 einheitliche Initialisierung funktioniert nicht mit "g ++ -std = C++ 0x"
virtual std::vector<float> operator()(const std::vector<float>& = {});
, die eine einheitliche Initialisierung verwendet (hier nur {}
) , ein Feature aus C++ 11. Bei der Kompilierung mit clang++ -std=c++11
ist das kein Problem. Aber wenn ich g++ -std=c++0x
verwende ich diese:
error: expected primary-expression before '{' token
Ist nicht die -std=c++0x
Option sollte bringen c me 11 Unterstützung ++?
Der Compiler gibt mir keinen Fehler, wenn das Verfahren unter Verwendung von Standard-C++ wie folgt erklärt:
virtual std::vector<float> operator()(const std::vector<float>& = std::vector<float>());
I g bin mit ++ 4.6 auf Ubuntu 12.04
Nicht sicher, was Sie fragen 'std = C++ 0x' ist nicht C++ 11 Unterstützung, es ist vor-11, wie von gcc-Entwicklern zurück am Tag der 4.6 verstanden. Wenn Sie volles C++ 11 wollen, benutzen Sie '-std = C++ 11'. – SergeyA
Sieht aus wie ein gcc-Fehler. Es kompiliert in 4.7.3 und höher: https://godbolt.org/g/gy9Kb5 – NathanOliver
Jetzt gibt es C++ 11/C++ 14, es gibt keinen Sinn, C++ 0x/C++ 1y zu verwenden. und sobald C++ 17 aus ist, wäre C++ 1z auch nicht notwendig. – Jarod42