2016-04-28 5 views
1

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

+1

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

+0

Sieht aus wie ein gcc-Fehler. Es kompiliert in 4.7.3 und höher: https://godbolt.org/g/gy9Kb5 – NathanOliver

+0

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

Antwort

1

Vom GCC 4.7 release notes:

G++ now accepts the -std=c++11 , -std=gnu++11 , and -Wc++11-compat options, which are equivalent to -std=c++0x , -std=gnu++0x , and -Wc++0x-compat , respectively.

Von der C++11 in GCC project page:

GCC 4.8.1 was the first feature-complete implementation of the 2011 C++ standard, previously known as C++0x.


Schlechte Nachrichten, Sie müssen Ihren Compiler aktualisieren, um C++ 11-Unterstützung zu erhalten.

0

GCC 4.6 nicht alle C++ unterstützen 11 Funktionen:

GCC provides experimental support for the upcoming ISO C++ standard, C++0x. This support can be enabled with the -std=c++0x.

Ich schlage vor, dass Sie auf die neueste GCC-Version zu aktualisieren, und kompilieren mit der Flagge -std=c++11 oder sogar -std=c++14

Verwandte Themen