Здравствуйте!
А в чем проблема делать strong typedef через enum и просто переопределить все нужные операторы? Типа:
enum class NewType: int { dummy };
IMPLEMENT_ARITHMETIC_OPERATORS(NewType)
IMPLEMENT_RELATION_OPERATORS(NewType)
IMPLEMENT_UNDERLYING_TYPE_EQUAL_OPERATORS(NewType)
// или
enum class NewFlagType: unsigned { dummy };
IMPLEMENT_BIT_OPERATORS(NewFlagType)
IMPLEMENT_UNDERLYING_TYPE_EQUAL_OPERATORS(NewFlagType)
При этом можно делать различия — если нужен арифметический тип — переопределяем всякие +-/*, если это флаговый typedef — то переопределяем только битовые операторы.
Вроде я как-то не видел такого, обычно делают класс/структуру с операторами преобразования в underlying_type.
Могут быть проблемы от того, что реально переменная такого типа принимает значения, которые не перечислены в enum?
Тогда, может, достаточно будет добавить в enum значения min_value/max_value?