That enum looks like valid C++ code from my eyes, I've used things such as it before. What makes it valid is setting each "id = value" ie (DL_TC = 16"). An enum will just increment the value associated with an id from the previous value set; starting at 0.
enum
{
ZERO,
ONE,
TWO,
};
is the same as
enum
{
ZERO = 0,
ONE = 1,
TWO = 2,
};
and this is possible as well.
enum
{
ZERO = 0,
TWO = 2,
THREE,
};
I don't see how #define and enum values would be causing any issues. DarkTimes you could try;
int enumX = EDL_SHIFT | EDL_HANDBRAKE;
int defineX = DDL_SHIFT | EDL_HANDBRAKE;
and see if there are by chance discrepancies, though I doubt it from what I have learned about the C++ language.
(You can see that all values in the enum are changed to EDL and all values using defines would changed be DDL)
If perhaps there is a difference I would like to know because I always have preferred #defines in certain cases like this but never knew doing this would (or could) cause issues. Good luck.