March 15th, 2007

nyaload

enum&enum = enum (полезные перегрузки операторов для enum)

Нашёл багофичу в Visual C++ - невозможно переопределить operator< для enum.
Collapse )
По идее, operator< - не должен быть встроеным для enum, а должно происходить неявное преобразование из enum -> int. И уже потом вызывается встроеный built-in C++ operator<(int, int).
Чем иногда и пользуются, например так -
Collapse )

Данные переопределения нужно для того, что бы результатом операции property2|property4 был MyMask, а не int.

а operator< мне потребовалось переопределить для того, что бы найти все места в коде, где он используется и изменить эти места в связи с изменением логики содержимого этого enum.

Таки не смотря на багофичу VC++ все места нашлись мгновенно, не смотря на то, что сообщение об ошибке не из-за типа void, а из тупости VC++ =) (обратите внимание, возвращается void вместо bool и на других компиляторах выводится сообщение об ошибке вроде "error: expression must have bool type (or be convertible to)". updated: только VC++ не находит сравнение внутри шаблонных функций вроде std::max / std::sort :(