C++ TR1の新しいenumの構文では、enumの後にclassがつけられるようになり、型も指定できるようになりました。
enum class 列挙型名 : 型 {
…,
}
例
enum class days : char {
Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
}
classも型も指定しない場合は、従来のC++と同じ動作になります。
型を指定しない場合は、intになります。
//従来と同じ書き方もできる。
enum months {
January, February, March, April, May, June,
July, August, September, October, November, December
}
classを指定した場合は、明示的にスコープを指定する必要があります。
days day = days::Sunday; //エラー
days day = Sunday; //エラー
classを指定しない場合は、スコープを指定する必要はありません。
months month = January;
前方宣言も可能になりました。
enum days : char;
前方宣言ができるようになったことと、明示的なスコープ指定を強制できるようになったことがメリットかな。