Switched to clang, used enum class instead of enum where appropriate to go with C++ 11 style