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);

Reply via email to