What's wrong with this ? It is ok in gcc 3 not not ok with gcc4:
#define SERVICE_TYPE(type, val, state) SERVICE_##type = val, typedef enum service_e {
SERVICE_TYPE(NONE, 0, false) SERVICE_TYPE(FTP, 1, true)
SERVICE_TYPE_MAX
} service_type_t;
Compiles fine for me with gcc-4.0.0, icc-8.1, and Comeau online.