Chcę eksperymentować z migracją projektu z gcc do clang ++. Przyznam ignorancja z mojej strony, nie jestem pewien, dlaczego następujący fragment koduBłąd kompilacji Constexpr z clang ++ nie g ++
template <typename T>
constexpr T pi{std::acos(T(-1.0))};
kompiluje cicho z g ++ ale dzyń ++ produkuje błąd
trig.hpp:3:13: error: constexpr variable 'pi<float>' must be initialized by a constant expression
constexpr T pi{std::acos(T(-1.0))};
i miałem nadzieję, że ktoś, kto wie więcej o to niż ja mogłem oświecić mnie.
NB: Próbowałem z -std = C++ 14 i C++ 1y. Brak wersji klang 3.6.2 (tagi/RELEASE_362/final). Działa z g ++ (GCC) 5.2.0.
Wygląda związane [Czy to jest zgodne rozszerzenie kompilatora do traktowania standardowych funkcji biblioteki non-constexpr jako constexpr?] (http://stackoverflow.com/q/27744079/1708801) –
@ShafikYaghmour Myślałem, że przeszukałem dobrze. Myliłem się. Dziękuję Ci. To naprawdę rozczarowujący wynik. Jestem również zaskoczony, że GCC nie emituje co najmniej ostrzeżenia, gdy zezwala na coś zabronionego w standardzie. Kompilowałem też z opcją -pedantic! Jeśli chcesz napisać odpowiedź, zaakceptuję ją. – Timtro
Nie dziwię się, że pytanie nie pojawiło się, nakładanie słów kluczowych wydaje się minimalne. Kiedy pierwszy raz wpadłem na to około rok temu, nie mogłem nic znaleźć i to nie było, dopóki przypadkiem nie wpadłem na problem z językiem grupy roboczej 2013, kiedy udało mi się połączyć te elementy. –