#include <stdint.h>
#include <iostream>
#include <limits>
#include <type_traits>
enum class Color: uint32_t{ red, green, blue, orange=0xFFFFFFFF };
int main(){
Color g = Color::green;
static_assert(std::underlying_type_t<Color>(Color::green) <= std::numeric_limits<uint8_t>::max(), "Green overflows!");
auto gg = static_cast<uint8_t>(g);
Color f = Color::orange;
static_assert(std::underlying_type_t<Color>(Color::orange) <= std::numeric_limits<uint8_t>::max(), "Orange overflows!");
auto ff = static_cast<uint8_t>(f);
printf("Casted value of red: 0x%x\n", gg);
printf("Casted value of orange: 0x%x\n", ff);
return 0;
}
I2luY2x1ZGUgPHN0ZGludC5oPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxsaW1pdHM+CiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KCmVudW0gY2xhc3MgQ29sb3I6IHVpbnQzMl90eyByZWQsIGdyZWVuLCBibHVlLCBvcmFuZ2U9MHhGRkZGRkZGRiB9OwoKaW50IG1haW4oKXsKICAgIENvbG9yIGcgPSBDb2xvcjo6Z3JlZW47CiAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8Q29sb3I+KENvbG9yOjpncmVlbikgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCksICJHcmVlbiBvdmVyZmxvd3MhIik7CiAgICBhdXRvIGdnID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oZyk7CgogICAgQ29sb3IgZiA9IENvbG9yOjpvcmFuZ2U7CiAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8Q29sb3I+KENvbG9yOjpvcmFuZ2UpIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpLCAiT3JhbmdlIG92ZXJmbG93cyEiKTsKICAgIGF1dG8gZmYgPSBzdGF0aWNfY2FzdDx1aW50OF90PihmKTsKICAgIAogICAgcHJpbnRmKCJDYXN0ZWQgdmFsdWUgb2YgcmVkOiAweCV4XG4iLCBnZyk7CiAgICBwcmludGYoIkNhc3RlZCB2YWx1ZSBvZiBvcmFuZ2U6IDB4JXhcbiIsIGZmKTsKCiAgICByZXR1cm4gMDsKfQ==
prog.cpp: In function ‘int main()’:
prog.cpp:14:64: error: static assertion failed: Orange overflows!
static_assert(std::underlying_type_t<Color>(Color::orange) <= std::numeric_limits<uint8_t>::max(), "Orange overflows!");
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~