enum без typedef или имени

Я пытаюсь понять некоторые с открытым исходным кодом

Я наткнулся на строку кода, которая напоминает

enum {
Thing1,
Thing2,
};

Мне было интересно, как работает этот enum? у него нет имени или typedef

Фактические строки кода можно найти Вот в строках 125 — 128

1

Решение

Это традиционное анонимное перечисление. Традиционные перечисления экспортируют свои символы во вложенное пространство имен:

namespace a{
enum {
Thing1, // a::Thing1
Thing2, // a::Thing2
};
}

Таким образом, в этом анонимном перечислении вам не нужно указывать имя перечисления для обозначения его членов, но это может привести к конфликтам имен из-за поведения экспорта символов во вложенное пространство имен:

namespace a{
enum {
Thing1, // a::Thing1
Thing2, // a::Thing2
};

enum namedEnum {
Thing1, // Error!
Thing2, // Error!
};
}
3

Другие решения

Эту конструкцию можно использовать для именованных констант, где фактическое значение неинтересно и единственным требованием является то, что значения констант различаются.

1