https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68300
--- Comment #1 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- From class.c: 1629 /* Return true, iff class T has a non-virtual destructor that is 1630 accessible from outside the class heirarchy (i.e. is public, or 1631 there's a suitable friend. */ 1632 1633 static bool 1634 accessible_nvdtor_p (tree t) 1635 { 1636 tree dtor = CLASSTYPE_DESTRUCTORS (t); 1637 1638 /* An implicitly declared destructor is always public. And, 1639 if it were virtual, we would have created it by now. */ 1640 if (!dtor) 1641 return true; 1642 1643 if (DECL_VINDEX (dtor)) 1644 return false; /* Virtual */ 1645 1646 if (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor)) 1647 return true; /* Public */ 1648 1649 if (CLASSTYPE_FRIEND_CLASSES (t) 1650 || DECL_FRIENDLIST (TYPE_MAIN_DECL (t))) 1651 return true; /* Has friends */ 1652 1653 return false; 1654 } Removing the friends check would fix the issue. Thoughts?