"6.6 Constant expressions" doesn't allow a cast from a non-arithmetic type to an arithmetic one generally, and a cast
in an address constant can only cast from an integer constant to a pointer type (eg, char *reg = (char*)0x123450);
the one example with 8c escaped with a warning ("initialize pointer to an integer") because of some 8c x86-specific folding that makes the expression acceptable.
even so, the format and intention of the example seems practical (with the correct cast to uintptr) and "An implementation may accept other forms of constant expressions".it should be fairly easy to add as an extension with consistent handling across ?c.