diff --git a/tests/poller.cpp b/tests/poller.cpp index efb14f5..307c72a 100644 --- a/tests/poller.cpp +++ b/tests/poller.cpp @@ -19,6 +19,17 @@ static_assert(!std::is_copy_constructible>::value, static_assert(!std::is_copy_assignable>::value, "poller_t should not be copy-assignable"); +TEST_CASE("event flags", "[poller]") +{ + CHECK((zmq::event_flags::pollin | zmq::event_flags::pollout) + == static_cast(ZMQ_POLLIN | ZMQ_POLLOUT)); + CHECK((zmq::event_flags::pollin & zmq::event_flags::pollout) + == static_cast(ZMQ_POLLIN & ZMQ_POLLOUT)); + CHECK((zmq::event_flags::pollin ^ zmq::event_flags::pollout) + == static_cast(ZMQ_POLLIN ^ ZMQ_POLLOUT)); + CHECK(~zmq::event_flags::pollin == static_cast(~ZMQ_POLLIN)); +} + TEST_CASE("poller create destroy", "[poller]") { zmq::poller_t<> a; diff --git a/zmq.hpp b/zmq.hpp index 1829247..eb8e9cb 100644 --- a/zmq.hpp +++ b/zmq.hpp @@ -1837,15 +1837,19 @@ enum class event_flags : short constexpr event_flags operator|(event_flags a, event_flags b) noexcept { - return static_cast(static_cast(a) | static_cast(b)); + return detail::enum_bit_or(a, b); } constexpr event_flags operator&(event_flags a, event_flags b) noexcept { - return static_cast(static_cast(a) & static_cast(b)); + return detail::enum_bit_and(a, b); +} +constexpr event_flags operator^(event_flags a, event_flags b) noexcept +{ + return detail::enum_bit_xor(a, b); } constexpr event_flags operator~(event_flags a) noexcept { - return static_cast(~static_cast(a)); + return detail::enum_bit_not(a); } struct no_user_data;