Bit flags for C++11 scoped enums
Switch branches/tags
Clone or download
grisumbras Merge pull request #9 from egorpugin/patch-1
Fix MSVC compiler errors.
Latest commit 6df748a Mar 5, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
include/flags Fix MSVC compiler errors. Feb 25, 2018
test Merge remote-tracking branch 'oiffrig/underlying_type' Oct 23, 2017
.gitignore Some tests! May 18, 2015
LICENSE Added some description and updated license Aug 1, 2014
README.md Readme now points to docs Jun 19, 2015

README.md

Flags for C++ 11 enum classes

C++ 11 gives a new type of enums — enum classes. These are strongly typed enumerations, they do not cast implicitly to or from the underlying integer type. They also do not leak enumeration values to enclosing scope (thus the names of this values do not clash and you no longer need to prefix/suffix them with something to disambiguate).

The only drawback to type safety is you cannot treat variables of enum class types as sets of flags. That is because enum classes do not cast to integers and there are no bitwise operators overloads defined for them.

This library brings a flags class template which provides bit flags for scoped enums.


Simple usage:

enum class MyEnum { Value1 = 1 << 0, Value2 = 1 << 1 };
ALLOW_FLAGS_FOR_ENUM(MyEnum)

int main() {
  auto mask1 = MyEnum::Value1 | MyEnum::Value2; // set flags Value1 and Value 2
  if (mask1 & MyEnum::Value2) { // if Value2 flag is set
    /* ... */
  }
}

More info can be found in the docs.