Ich möchte mit der Migration eines Projekts von gcc zu clang ++ experimentieren. Ich gebe zu Unwissenheit auf meinen Teil, ich bin nicht sicher, warum das folgende Stück CodeConstexpr Kompilierfehler mit clang ++ nicht g ++
template <typename T>
constexpr T pi{std::acos(T(-1.0))};
leise mit g kompiliert ++ aber Klirren ++ erzeugt die Fehler
trig.hpp:3:13: error: constexpr variable 'pi<float>' must be initialized by a constant expression
constexpr T pi{std::acos(T(-1.0))};
und ich hatte gehofft, dass jemand, der mehr über weiß es als ich könnte mich erleuchten.
NB: Versucht mit -std = C++ 14 und C++ 1y. Unterschlägt Version 3.6.2 (Tags/RELEASE_362/final). Funktioniert mit g ++ (GCC) 5.2.0.
Sieht im Zusammenhang mit [Ist es ein konformes Compiler-Erweiterung zur Behandlung von Nicht-Constexpr-Standard-Bibliotheksfunktionen als Constexpr?] (http://Stackoverflow.com/q/27744079/1708801) –
@ShafikYaghmour Ich dachte, ich suchte gut. Ich habe mich geirrt. Vielen Dank. Dies ist in der Tat ein enttäuschendes Ergebnis. Ich bin auch überrascht, dass GCC nicht zumindest eine Warnung ausgibt, wenn es etwas Verbotenes im Standard erlaubt. Ich kompilierte auch mit -pedantisch! Wenn Sie eine Antwort schreiben möchten, werde ich es akzeptieren. – Timtro
Ich bin nicht überrascht, dass die Frage nicht aufkam, scheint die Überschneidung in Keywords minimal. Als ich vor etwa einem Jahr das erste Mal darauf stieß, konnte ich nichts finden und es war nicht, bis ich zufällig in die Ausgabe 2013 der Spracharbeitsgruppe geriet, als es mir gelang, die Teile zusammenzusetzen. –