So, allow me to understand a bit more...
(things + 1) would equate to an integer (kinda like an auto cast to an int as a simpler form)
Yes, the result is an "int".
but the resulting integer really isn't an animal unless manually telling it what cast you want?
Yes.
i.e. ? things = (animal) 4; // would result into a monkey ?
Almost correct. The result is a "Monkey". Remember, C(++) is case-sensitive.
Seems as though C would be more flexible if you could work on values of an enum directly.
I think C is less restrictive and allows the use of increment. C++ has much stricter rules regarding assignment.
But oh well.
I do like C++ but things like this make me miss ObjectPascal.