Two aspects of enums have been changed since the ARM. The most important change is probably that you can now overload operators based on an enumeration instead of it being treated as an integral type.

	enum Status { OK, Busy, Stopped };
	bool operator==(Status a,Status b);

This was previously ill-formed before because enumeration types were treated as int.


The other aspect is that although enumeration types are no longer integral types, they now explicitly support arithmetic within certain boundaries.

Every enumeration type has an associated 'underlying type' which is large enough to hold all the bits needed to represent the largest and smallest values specified by the enumerators. The underlying type may be larger than necessary but 'not gratuitously larger than int'.

	enum Status { OK, Busy, Stopped };

The smallest value is 0, the largest is 2. The underlying type needs a least two bits so the underlying could be a char or it could be larger. It's unlikely to be larger than an int.

	enum Range { Low = -40000, High = 40000 };

Here the range needs 17 bits so the underlying type might be int on a 32-bit machine or long on a 16-bit machine.