Zgodnie z GCC C++11 support status website, silnie typowane wyliczenia są dostępne dla g++4.4
i więcej.Silnie typowane wyliczenia w g ++ - 4.4
Jednak dodaje się nie kompiluje z g++4.4
:
enum class Foo
{
value_1,
value_2
};
int main()
{
Foo a = Foo::value_1;
Foo b = Foo::value_2;
const bool test = (a < b);
}
Komunikat o błędzie jest error: invalid operands of types ‘Foo’ and ‘Foo’ to binary ‘operator<’
.
Kompilatory, które akceptują kod, to: g++-4.6
, g++-4.7
, g++-4.8
i clang++ 3.2
. (Nie mogłem przetestować z g++-4.5
, ponieważ nie mam go obecnie zainstalowanego (i Ubuntu 13 nie chce, żebym to zrobił))
Mogłabym łatwo zapewnić awarię dla tego (raczej starego) kompilatora z makrem, ale generalnie mi się to nie podoba (gdzie to się kończy? ...).
Na czym polega problem? Czy informacje na temat wsparcia są błędne lub brakuje innego elementu, którego nie uwzględniono w sekcji "Obsługa wyrażeń napisanych ściśle"? Ostatnia opcja, którą mogę wymyślić: Czy problem występuje w moim kodzie?
kodu produkcyjnego, moje zalecenie byłoby nie skorzystać C++ 11 funkcje w wersjach przed co najmniej 4,7, a korzystnie nie przed 4.8. Jeśli nalegasz na obsługę wielu wersji kompilatorów * i * chcesz korzystać z funkcji C++ 11, szybko stajesz się opiekunem baz danych błędów g ++. Ubuntu 13 dostarcza g ++ 4.7 po wyjęciu z pudełka i jest ppa na g ++ 4.8 – TemplateRex
Cóż, działa dobrze, z wyjątkiem tego małego kawałka. Wiem, że wolałbym mieć pętle bazujące na zasięgu, ale jest to kompromis pomiędzy przyjemnymi funkcjami i kompatybilnością. – stefan
+1 za samodzielny przykład i wysiłek badawczy. Niestety wydaje się, że jest to wyjątek dla pytań SO. – juanchopanza