Embedded Template Library 1.0
user_type

Smart enumerations.
A method of declaring a user type that also contains a set of constants, but are not constrained to just those values. This contrasts with 'enum_type', where the values are expected to only contain those defined as constants. Declaring the enumeration.

ETL_DECLARE_USER_TYPE(CompassDirection, int)
ETL_USER_TYPE(North, 0)
ETL_USER_TYPE(South, 180)
ETL_USER_TYPE(East, 90)
ETL_USER_TYPE(West, 270)
ETL_END_USER_TYPE(CompassDirection)

Using the enumeration.

CompassDirection direction; // Default construction.
direction = CompassDirection::North; // Assignment from an enumeration constant;
int value = int(direction); // Explicit conversion to 'int'.
int value = direction.get();
int& value = direction.get(); // Bind to internal value.
const int& value = direction.get();
direction = CompassDirection(value); // Explicit conversion from 'int'.
direction = CompassDirection(3); // Explicit conversion from a value.
++direction; // Manipulate the value;
direction -= CompassDirection(20);
direction = value; // Implicit conversion from 'int'. **** Compilation error ****