You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chromium/chromium-84-flat_map-flat_t...

67 lines
2.7 KiB

5 years ago
From 911bdcd8cc5475be4ec4228cfbc85fc38f52857e Mon Sep 17 00:00:00 2001
From: Stephan Hartmann <stha09@googlemail.com>
Date: Wed, 27 May 2020 10:00:41 +0000
Subject: [PATCH] GCC: make base::{flat_map,flat_tree} move assignement operators noexcept
Move assigment operator in ui::ColorSet is noexcept. Because this
class has a member of type base::flat_map, move assignment operators
of base::flat_map and base::flat_tree must be noexcept too.
base::flat_tree noexcept is conditional to avoid build failure with
NaCl.
Otherwise GCC fails like this:
../../ui/color/color_set.cc:14:11: error: function
'ui::ColorSet& ui::ColorSet::operator=(ui::ColorSet&&)' defaulted on its
redeclaration with an exception-specification that differs from the
implicit exception-specification ''
14 | ColorSet& ColorSet::operator=(ColorSet&&) noexcept = default;
| ^~~~~~~~
Bug: 819294
Change-Id: I10ce31851effc9ce78f2b5cbbb7148c339f065a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2179245
Commit-Queue: Jan Wilken Dörrie <jdoerrie@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#772175}
---
diff --git a/base/containers/flat_map.h b/base/containers/flat_map.h
index ed82c5d..1af6b40 100644
--- a/base/containers/flat_map.h
+++ b/base/containers/flat_map.h
@@ -202,7 +202,7 @@
~flat_map() = default;
flat_map& operator=(const flat_map&) = default;
- flat_map& operator=(flat_map&&) = default;
+ flat_map& operator=(flat_map&&) noexcept = default;
// Takes the first if there are duplicates in the initializer list.
flat_map& operator=(std::initializer_list<value_type> ilist);
diff --git a/base/containers/flat_tree.h b/base/containers/flat_tree.h
index 9412ff6..ce6e92b 100644
--- a/base/containers/flat_tree.h
+++ b/base/containers/flat_tree.h
@@ -125,7 +125,8 @@
// Assume that move assignment invalidates iterators and references.
flat_tree& operator=(const flat_tree&);
- flat_tree& operator=(flat_tree&&);
+ flat_tree& operator=(flat_tree&&) noexcept(
+ std::is_nothrow_move_assignable<underlying_type>::value);
// Takes the first if there are duplicates in the initializer list.
flat_tree& operator=(std::initializer_list<value_type> ilist);
@@ -518,7 +519,9 @@
const flat_tree&) -> flat_tree& = default;
template <class Key, class Value, class GetKeyFromValue, class KeyCompare>
-auto flat_tree<Key, Value, GetKeyFromValue, KeyCompare>::operator=(flat_tree &&)
+auto flat_tree<Key, Value, GetKeyFromValue, KeyCompare>::
+operator=(flat_tree&&) noexcept(
+ std::is_nothrow_move_assignable<underlying_type>::value)
-> flat_tree& = default;
template <class Key, class Value, class GetKeyFromValue, class KeyCompare>