Hi Jakup,
two comments which may or may not be helpful: Clang extended _Generic in a similar way: https://github.com/llvm/llvm-project/commit/12728e144994efe84715f4e5dbb8c3104e9f0b5a Although for _Generic you can achieve the same with checking for compatiblilty of pointer to the type, and I do not think this helps with the classification problem. If I am not missing something, you should be able to check for an enumerated type using _Generic by checking that the type is not compatible to another enum type: enum type_check { _X = 1 }; #define type_is_enum(x) \ _Generic(x, unsigned int: _Generic(x, enum type_check: 0, default: 1), default: 0) https://godbolt.org/z/j6z4a4Mdn For C23 with fixed underlying type this may become more complicated. Maybe this becomes to messy. Martin