From 6ab3208d779ffb3b32744b0190d7035d4b369173 Mon Sep 17 00:00:00 2001 From: Michael Park Date: Wed, 8 Jul 2020 10:46:02 -0700 Subject: [PATCH] Remove the unnecessary `is_nothrow_swappable` condition in `swap`. Thanks to @lewissbaker who pointed out the unnecessary condition in https://reviews.llvm.org/D81954#inline-756872. Since this codepath does not make use of `swap` anyway (that codepath is a different branch), we can safely remove this condition and produce better codegen when all types are nothrow movable but are potentially-throwing swappable. See codegen in https://gcc.godbolt.org/z/uDFZjz Reviewed By: ldionne, #libc Differential Revision: https://reviews.llvm.org/D83274 --- libcxx/include/variant | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libcxx/include/variant b/libcxx/include/variant index 502d8d83aeab4..03557239a69e6 100644 --- a/libcxx/include/variant +++ b/libcxx/include/variant @@ -1063,8 +1063,7 @@ public: } __impl __tmp(_VSTD::move(*__rhs)); #ifndef _LIBCPP_NO_EXCEPTIONS - if constexpr (__all<(is_nothrow_move_constructible_v<_Types> && - is_nothrow_swappable_v<_Types>)...>::value) { + if constexpr (__all...>::value) { this->__generic_construct(*__rhs, _VSTD::move(*__lhs)); } else { // EXTENSION: When the move construction of `__lhs` into `__rhs` throws