src/chess/rules.h

changeset 227
447d1e192807
parent 224
93e0e89496fe
equal deleted inserted replaced
226:341080f6bf34 227:447d1e192807
49 #define INVALID_CHECKMATE 11 49 #define INVALID_CHECKMATE 11
50 #define RULES_VIOLATED 32 50 #define RULES_VIOLATED 32
51 51
52 #ifdef __cplusplus 52 #ifdef __cplusplus
53 extern "C" { 53 extern "C" {
54 #endif
55
56 #if defined(__cplusplus) || \
57 (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202310L)
54 #define enum_byte(name) enum e##name : uint8_t 58 #define enum_byte(name) enum e##name : uint8_t
55 #define typedef_enum_byte(name) typedef enum e##name name 59 #define typedef_enum_byte(name) typedef enum e##name name
56 #elif __STDC_VERSION__ < 202310L 60 #else
57 /* since #warning is also a C23 feature, the only hope is this: */ 61 /* since #warning is also a C23 feature, the only hope is this: */
58 #pragma GCC warning "Type safety for enums is only available since C23" 62 #pragma GCC warning "Type safety for enums is only available since C23"
59 #define enum_byte(name) enum e##name 63 #define enum_byte(name) enum e##name
60 #define typedef_enum_byte(name) typedef uint8_t name 64 #define typedef_enum_byte(name) typedef uint8_t name
61 #else
62 #define enum_byte(name) enum e##name : uint8_t
63 #define typedef_enum_byte(name) typedef enum e##name name
64 #endif 65 #endif
65 66
66 #define ENPASSANT_THREAT 0x40u 67 #define ENPASSANT_THREAT 0x40u
67 68
68 enum_byte(Color) { 69 enum_byte(Color) {

mercurial