Ist es sicher, eine Enum-Klassenvariable auf eine Referenz des zugrunde liegenden Typs umzuinterpretieren?
Ich habe gesehenreinterpret_cast
wird verwendet, um Inkrementierung auf Enum-Klassen anzuwenden, und ich möchte wissen, ob diese Verwendung in Standard-C ++ akzeptabel ist.
enum class Foo : int8_t
{
Bar1,
Bar2,
Bar3,
Bar4,
First = Bar1,
Last = Bar4
};
for (Foo foo = Foo::First; foo <= Foo::Last; ++reinterpret_cast<int8_t &>(foo))
{
...
}
Ich weiß, dass das Casting auf eine Referenz einer Basisklasse im Fall von Trivialklassen sicher ist. Da Enum-Klassen jedoch nicht implizit in ihre zugrunde liegenden Typen konvertiert werden, bin ich mir nicht sicher, ob und wie der obige Code in allen Compilern funktionieren würde. Irgendwelche Hinweise?