Voglio sperimentare la migrazione di un progetto da gcc a clang ++. Ammetto l'ignoranza da parte mia, io non sono sicuro perché il seguente pezzo di codiceErrore di compilazione di Constexpr con clang ++ not g ++
template <typename T>
constexpr T pi{std::acos(T(-1.0))};
compila in silenzio con g ++ ma clang ++ genera l'errore
trig.hpp:3:13: error: constexpr variable 'pi<float>' must be initialized by a constant expression
constexpr T pi{std::acos(T(-1.0))};
e speravo qualcuno che sa di più su quello di me potrebbe illuminarmi.
NB: Provato con -std = C++ 14 e C++ 1y. Errore in clang versione 3.6.2 (tag/RELEASE_362/final). Funziona con g ++ (GCC) 5.2.0.
Sembra correlate a [E 'una conforme estensione del compilatore per trattare le funzioni della libreria standard di non-constexpr come constexpr?] (http://stackoverflow.com/q/27744079/1708801) –
@ShafikYaghmour Pensavo di aver cercato bene. Mi sbagliavo. Grazie. Questo è davvero un risultato deludente. Sono anche sorpreso che GCC non emetta almeno un avvertimento quando consentirà qualcosa di proibito nello standard. Stavo compilando anche -pedantic! Se vuoi scrivere una risposta, la accetterò. – Timtro
Non sono sorpreso che la domanda non sia venuta, la sovrapposizione nelle parole chiave sembra minima. Quando mi sono imbattuto per la prima volta circa un anno fa non sono riuscito a trovare nulla e non è stato fino a quando non mi sono imbattuto accidentalmente nel numero del gruppo di lavoro linguistico 2013 quando sono riuscito a mettere insieme i pezzi. –