Handling enums with fixed underlying type

This is absolutely mandatory to cope with some compiler's bugs (int
instead of short/char) and with the C++ standard defect there (call is
ambigous).