https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89914
--- Comment #3 from Paolo Carlini <paolo.carlini at oracle dot com> --- This is what I meant in code. Passes testing. Index: semantics.c =================================================================== --- semantics.c (revision 270062) +++ semantics.c (working copy) @@ -9548,8 +9548,8 @@ classtype_has_nothrow_assign_or_copy_p (tree type, if (copy_fn_p (fn) > 0) { saw_copy = true; - maybe_instantiate_noexcept (fn); - if (!TYPE_NOTHROW_P (TREE_TYPE (fn))) + if (maybe_instantiate_noexcept (fn) + && !TYPE_NOTHROW_P (TREE_TYPE (fn))) return false; } } @@ -9591,8 +9591,8 @@ trait_expr_value (cp_trait_kind kind, tree type1, return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2) || (CLASS_TYPE_P (type1) && (t = locate_ctor (type1)) - && (maybe_instantiate_noexcept (t), - TYPE_NOTHROW_P (TREE_TYPE (t))))); + && maybe_instantiate_noexcept (t) + && TYPE_NOTHROW_P (TREE_TYPE (t)))); case CPTK_HAS_TRIVIAL_CONSTRUCTOR: type1 = strip_array_types (type1);