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?