Home

Awesome

Bitmask operators and typesafe comparisons for enum class

EnumClass.h is a utility header that allows you to easily generate bitwise operators for your custom enum class type like so:

enum class myEnum
{
	enumerator1 = 0x1 << 0,
	enumerator2 = 0x1 << 1,
	enumerator3 = 0x1 << 2
};

enableEnumClassBitmask(myEnum); // Activate bitmask operators

This utility relies on two concepts: enumerators and masks. An enumerator’s purpose is to give a name to a specific bit when it is set. A mask, on the other hand, represents the state of every bit (and this way, of every enumerator), whether they are set or cleared. Comparing an enumerator to a mask using operator== or operator!= is a compiler error. A complete blog post explains why and how this is implemented.

Here are some tables that summarize the return type of all of the operators :

Binary bitwise operators

E, EE, bitmask<E>bitmask<E>, Ebitmask<E>, bitmask<E>
operator&EEE
operator|bitmask<E>bitmask<E>bitmask<E>
operator^bitmask<E>bitmask<E>bitmask<E>
operator&=bitmask<E>bitmask<E>bitmask<E>
operator|=bitmask<E>bitmask<E>bitmask<E>
operator^=bitmask<E>bitmask<E>bitmask<E>

Unary bitwise operators

Ebitmask<E>
operator~bitmask<E>

Comparison operators

E, EE, bitmask<E>bitmask<E>, Ebitmask<E>, bitmask<E>
operator==boolstatic_assertstatic_assert
operator!=boolstatic_assertstatic_assert