From c6c224a78715d5e2c532fe318325fbca8e70e701 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Fri, 9 Dec 2022 20:00:08 +0300 Subject: Add noexcept to move constructors and move assignment operators --- libbutl/small-list.hxx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'libbutl/small-list.hxx') diff --git a/libbutl/small-list.hxx b/libbutl/small-list.hxx index aaeef22..7cb51fd 100644 --- a/libbutl/small-list.hxx +++ b/libbutl/small-list.hxx @@ -4,8 +4,9 @@ #pragma once #include -#include // size_t -#include // move() +#include // size_t +#include // move() +#include // is_nothrow_move_constructible #include @@ -103,14 +104,20 @@ namespace butl return *this; } + // See small_vector for the move-constructor/assignment noexept + // expressions reasoning. + // small_list (small_list&& v) +#if !defined(__GLIBCXX__) && (!defined(_MSC_VER) || _MSC_VER > 1900) + noexcept (std::is_nothrow_move_constructible::value) +#endif : base_type (allocator_type (this)) { *this = std::move (v); // Delegate to operator=(&&). } small_list& - operator= (small_list&& v) + operator= (small_list&& v) noexcept (false) { // libstdc++'s implementation prior to GCC 6 is broken (calls swap()). // Since there is no easy way to determine this library's version, for @@ -122,7 +129,7 @@ namespace butl #if defined(__GLIBCXX__) || (defined(_MSC_VER) && _MSC_VER <= 1900) this->clear (); for (T& x: v) - this->push_back (std::move (x)); + this->push_back (std::move (x)); // Note: can throw bad_alloc. v.clear (); #else // Note: propagate_on_container_move_assignment = false -- cgit v1.1