Enumeration Syntax and Semantics
A Slice enumerated type definition looks identical to C++:
This definition introduces a type named
Fruit that becomes a new type in its own right. Slice guarantees that the values of enumerators increase from left to right, so
Apple compares less than
Pear in every language mapping. By default, the first enumerator has a value of zero, with sequentially increasing values for subsequent enumerators.
A Slice enum type introduces a new namespace scope, so the following is legal:
The example below shows how to refer to an enumerator from a different scope:
Slice does not permit empty enumerations.
In Ice releases prior to Ice 3.7, an enum type did not create a new namespace and its enumerators were in the same namespace as the enum type itself. With these releases, you had to select longer enumerator names to avoid a naming clash.
Custom Enumerator Values
Slice also permits you to assign custom values to enumerators:
Custom values must be unique and non-negative, and may refer to Slice constants of integer types. If no custom value is specified for an enumerator, its value is one greater than the enumerator that immediately precedes it. In the example above,
Orange has the value 8.
The maximum value for an enumerator value is the same as the maximum value for
int, 2 31 - 1.
Slice does not require custom enumerator values to be declared in increasing order:
Note however that when there is an inconsistency between the declaration order and the numerical order of the enumerators, the behavior of comparison operations may vary between language mappings.