diff --git a/include/mbgl/map/update.hpp b/include/mbgl/map/update.hpp index e47feea94..4ad1b1d19 100644 --- a/include/mbgl/map/update.hpp +++ b/include/mbgl/map/update.hpp @@ -1,6 +1,8 @@ #ifndef MBGL_MAP_UPDATE #define MBGL_MAP_UPDATE +#include + #include namespace mbgl { @@ -16,7 +18,7 @@ enum class Update : uint8_t { }; inline Update operator| (const Update& lhs, const Update& rhs) { - return Update(static_cast(lhs) | static_cast(rhs)); + return Update(mbgl::underlying_type(lhs) | mbgl::underlying_type(rhs)); } inline Update& operator|=(Update& lhs, const Update& rhs) { @@ -25,7 +27,7 @@ inline Update& operator|=(Update& lhs, const Update& rhs) { } inline bool operator& (const Update& lhs, const Update& rhs) { - return static_cast(lhs) & static_cast(rhs); + return mbgl::underlying_type(lhs) & mbgl::underlying_type(rhs); } } // namespace mbgl diff --git a/include/mbgl/util/traits.hpp b/include/mbgl/util/traits.hpp new file mode 100644 index 000000000..812d9fb54 --- /dev/null +++ b/include/mbgl/util/traits.hpp @@ -0,0 +1,15 @@ +#ifndef MBGL_UTIL_TRAITS +#define MBGL_UTIL_TRAITS + +#include + +namespace mbgl { + +template +constexpr auto underlying_type(T t) -> typename std::underlying_type::type { + return static_cast::type>(t); +} + +} // namespace mbgl + +#endif // MBGL_UTIL_TRAITS diff --git a/src/mbgl/renderer/render_pass.hpp b/src/mbgl/renderer/render_pass.hpp index a1e965d91..d3b60d066 100644 --- a/src/mbgl/renderer/render_pass.hpp +++ b/src/mbgl/renderer/render_pass.hpp @@ -1,8 +1,9 @@ #ifndef MBGL_RENDERER_RENDER_PASS #define MBGL_RENDERER_RENDER_PASS +#include + #include -#include namespace mbgl { @@ -13,8 +14,7 @@ enum class RenderPass : uint8_t { }; constexpr inline RenderPass operator|(RenderPass a, RenderPass b) { - return static_cast(static_cast::type>(a) | - static_cast::type>(b)); + return static_cast(mbgl::underlying_type(a) | mbgl::underlying_type(b)); } inline RenderPass operator|=(RenderPass& a, RenderPass b) { @@ -22,8 +22,7 @@ inline RenderPass operator|=(RenderPass& a, RenderPass b) { } constexpr inline RenderPass operator&(RenderPass a, RenderPass b) { - return static_cast(static_cast::type>(a) & - static_cast::type>(b)); + return static_cast(mbgl::underlying_type(a) & mbgl::underlying_type(b)); } } // namespace mbgl