From 5c4438a5bb7656b36cf9c5299cfbfa32f2834b7e Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Fri, 8 Oct 2021 14:39:40 +0100 Subject: [PATCH] [Minor] Add explicit move operators for mime_string --- src/libmime/mime_string.hxx | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/libmime/mime_string.hxx b/src/libmime/mime_string.hxx index 94bdafb02..fbd03206a 100644 --- a/src/libmime/mime_string.hxx +++ b/src/libmime/mime_string.hxx @@ -283,6 +283,11 @@ public: basic_mime_string(const view_type &st, const Allocator& alloc = Allocator()) noexcept : basic_mime_string(st.data(), st.size(), alloc) {} + /* Explicit move ctor */ + basic_mime_string(basic_mime_string &&other) noexcept { + *this = std::move(other); + } + /** * Creates a string with a filter function. It is calee responsibility to @@ -310,6 +315,14 @@ public: const Allocator& alloc = Allocator()) noexcept : basic_mime_string(st.data(), st.size(), std::move(filt), alloc) {} + /* It seems some libc++ implementations still perform copy, this might fix them */ + basic_mime_string& operator=(basic_mime_string &&other) { + storage = std::move(other.storage); + filter_func = std::move(other.filter_func); + + return *this; + } + constexpr auto size() const noexcept -> std::size_t { return storage.size(); } -- 2.39.5