The first enum member defaults to 0, not 1, even though the underlying type is integer. This is true for C#, C++, Java, and most other languages. The default type is indeed integer, but the automatic value assignment starts at 0 unless explicitly specified.