Ответ 1
Это расширение Microsoft, которое позволяет выбрать базовый тип значений перечисления. Например, это позволяет вам указать, что значения без знака (компиляторы Microsoft обычно выбирают подписанные по умолчанию) или что они занимают только 8 или 16 бит (обычно Microsoft по умолчанию составляет 32 бита).
Синтаксис описан здесь: http://msdn.microsoft.com/en-us/library/2dzy4k6e(v=VS.100).aspx, но я не могу найти официальную документацию о том, что он на самом деле делает.
С++ 11 добавляет подобную функцию, но имеет немного другой синтаксис. В С++ 11 вы должны написать это следующим образом:
enum class MyEnum : size_type { .. values .. };