Am 25.07.2017 um 19:31 schrieb Martok: > As has just been pointed out to me, we all misdiagnosed that example. Turns out this is not a new question, there is actually a very thorough treatment of that very issue on SO: <https://stackoverflow.com/questions/18195312/what-happens-if-you-static-cast-invalid-value-to-enum-class>
(Continue reading after the mention of CWG 1766, the interesting part is what "representable range" means) The simple answer however is: a C++ enum with fixed base type (FPC analogue: any setting other than {$PACKENUM DEFAULT}), any value of the base type is valid. C++ enums *without* base type may also have a smaller range than int, but always a power-of-two. That would mean one could mask with that size (we already generate the masking sometimes) and make the jumptable larger, saving a Jx at the expense of a larger table. So the question boils down to: do we want C-Style Enums to behave like in C-dialects, or just look like they do? If we do, there's a very simple solution: by setting a fixed $Z option, the programmer specifically *chose* Low-Level enums. We could just honour that and be done with it. -- Martok _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel