https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80259

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
With untested:
--- gcc/decl2.c.jj      2017-02-21 18:59:36.000000000 +0100
+++ gcc/decl2.c 2017-03-30 10:16:03.972113673 +0200
@@ -888,9 +888,18 @@ grokfield (const cp_declarator *declarat
        {
          if (init == ridpointers[(int)RID_DELETE])
            {
-             DECL_DELETED_FN (value) = 1;
-             DECL_DECLARED_INLINE_P (value) = 1;
-             DECL_INITIAL (value) = error_mark_node;
+             if (friendp && decl_defined_p (value))
+               {
+                 error ("redefinition of %q#D", value);
+                 inform (DECL_SOURCE_LOCATION (value),
+                         "%q#D previously defined here", value);
+               }
+             else
+               {
+                 DECL_DELETED_FN (value) = 1;
+                 DECL_DECLARED_INLINE_P (value) = 1;
+                 DECL_INITIAL (value) = error_mark_node;
+               }
            }
          else if (init == ridpointers[(int)RID_DEFAULT])
            {
I get:
pr80259.C:5:23: error: redefinition of ‘void foo()’
   friend void foo() = delete;
                       ^~~~~~
pr80259.C:1:6: note: ‘void foo()’ previously defined here
 void foo() {}
      ^~~
but no idea if you don't want to resolve it differently.

Reply via email to