Enumerators are considered defined immediately after their initializers; therefore, they can be used to initialize succeeding enumerators. The following example defines an enumerated type that ensures that any two enumerators can be combined with the OR operator:
enum FileOpenFlags
{
OpenReadOnly = 1,
OpenReadWrite = OpenReadOnly << 1,
OpenBinary = OpenReadWrite << 1,
OpenText = OpenBinary << 1,
OpenShareable = OpenText << 1
};
In the preceding example, the preceding enumerator is used to initialize each succeeding enumerator.