diff --git a/include/ring-buffer.h b/include/ring-buffer.h index 88200a5..5d8f40b 100644 --- a/include/ring-buffer.h +++ b/include/ring-buffer.h @@ -6,6 +6,14 @@ #include #include +namespace detail { + using std::swap; + template + CONSTEXPR void adl_swap(T& a, T&b ) COND_NOEXCEPT(noexcept(swap(a, b))) { + swap(a, b); + } +} + template class basic_ring_buffer { public: @@ -71,6 +79,11 @@ public: CONSTEXPR const_iterator cend() const COND_NOEXCEPT(noexcept(container.size())) { return {container, front_index, container.size()}; } + CONSTEXPR friend void swap(basic_ring_buffer& a, basic_ring_buffer& b) COND_NOEXCEPT(noexcept(detail::adl_swap(a.container, b.container))) { + using std::swap; + swap(a.container, b.container); + swap(a.front_index, b.front_index); + } }; template