Мне нравятся эти NUnit, Утверждают расширения: http://svn.caffeine-it.com/openrasta/trunk/src/Rasta.Testing/AssertExtensions.cs
Из N4659 C ++ 7.2 / 5 :
Для перечисления, базовый тип которого не фиксирован, базовым типом является интегральный тип, который может представлять все значения перечислителя, определенные в перечислении. Если ни один целочисленный тип не может представить все значения перечислителя, это означает, что перечисление неправильно сформировано. Это определяется реализацией, какой интегральный тип используется в качестве базового типа, за исключением того, что базовый тип не должен быть больше
int
, если только значение перечислителя не может поместиться вint
илицелое число без знака
. Если список перечислителей пуст, базовый тип такой, как если бы перечисление имело один перечислитель со значением 0.
Типом перечисления C ++ является само перечисление. Его диапазон довольно произвольный, но с практической точки зрения его базовый тип - это int
.
Однако он неявно приводится к int
, где бы он ни использовался.
Это изменилось, начиная с C ++ 11, в котором были введены типизированные перечисления. Нетипизированное enum
теперь определяется как имеющее ширину не менее int
(и шире, если требуются большие значения). Однако, учитывая типизированное перечисление
, определенное следующим образом:
enum name : type {};
Перечисление типа имя
имеет базовый тип тип
. Например, enum: char
определяет enum
той же ширины, что и char
вместо int
.
Далее, ] enum
может быть явно ограничен следующим образом:
enum class name : type {
value = 0,
// ...
};
(Где имя
является обязательным, но тип
не является обязательным.) Перечисление , объявленное таким образом, больше не будет неявно приводиться к своему базовому типу (требующему
static_cast <>
) и значения должны указываться с полностью определенным именем. В этом примере, чтобы присвоить значение
переменной enum
, вы должны ссылаться на нее как на name :: value
.
IIRC он представлен в памяти как int . Но в gcc есть переключатель -fshort-enum
, чтобы сделать его кратчайшим целочисленным типом, подходящим для всех значений, если вам нужно сэкономить место. В других компиляторах будет нечто подобное.