- компилятор: клан++
- Стандарт С++: С++ 20
Я попытался запустить код, и результаты очень хорошо оправдали мои ожидания.
#include <iostream>
using namespace std;
int main()
{
enum class Num : int
{
one = 1,
two = 2,
zero = 0
};
Num e = Num::one;
auto a = static_cast<std::underlying_type_t<Num>>(e);
cout << "-----------" << endl;
cout << a << endl;
cout << "-----------" << endl;
return 0;
}
результат:
-----------
1
-----------
Но когда я сделал небольшую модификацию, изменив базовый тип класса enum с int на int8_t, результат оказался неожиданным.
#include <iostream>
using namespace std;
int main()
{
enum class Num : int8_t // from 'int' to 'int8_t'
{
one = 1,
two = 2,
zero = 0
};
Num e = Num::one;
auto a = static_cast<std::underlying_type_t<Num>>(e);
cout << "-----------" << endl;
cout << a << endl;
cout << "-----------" << endl;
return 0;
}
результат:
-----------
-----------
Что здесь случилось?