Я видел reinterpret_cast
, используемый для применения инкремента к классам перечисления, и я хотел бы знать, допустимо ли это использование в стандартном С++.
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))
{
...
}
Я знаю, что кастинг для ссылки базового класса безопасен в случае тривиальных классов. Но поскольку классы перечисления не являются событиями, неявно преобразованными в их базовые типы, я не уверен, будет ли и как код, описанный выше, гарантированно будет работать во всех компиляторах. Любые подсказки?