Можете ли вы реализовать стандартную совместимость (как описано в 17.5.2.1.3 черновика n3242) безопасными битами с использованием класса enum? Как я его читал, тип T является битовой маской, если он поддерживает операторы |, &, ^, ~, | =, & = и ^ =, и, кроме того, вы можете делать, если (l & r), где l и r имеют тип T. Отсутствие в списке оператора!= и == и разрешить сортировку, вероятно, также хочет перегрузить <.
Получение операторов для работы - это просто раздражающий шаблонный код, но я не вижу, как это сделать, если (l & r). По крайней мере, следующее не компилируется с GCC (кроме того, что это чрезвычайно опасно, поскольку позволяет ошибочное неявное преобразование в int):
enum class Foo{
operator bool(){
return (unsigned)*this;
}
};
EDIT: теперь я точно знаю, что классы перечисления не могут иметь членов. Фактический вопрос, как это сделать, если (l & r) остается, хотя.