friend.c (do_friend): Add support for nested classes using member functions of the...
authorBenjamin Kosnik <bkoz@gcc.gnu.org>
Thu, 11 Jun 1998 20:11:55 +0000 (20:11 +0000)
committerBenjamin Kosnik <bkoz@gcc.gnu.org>
Thu, 11 Jun 1998 20:11:55 +0000 (20:11 +0000)
8
* friend.c (do_friend): Add support for nested classes using
  member functions of the enclosing class as friends.
egcs bug

From-SVN: r20433

gcc/cp/friend.c

index c6f68bd07f031acdcb1f8a4a149f3d731ca9e0b7..e36d3066836c2f2ecb22efd457d6998e1437f5a6 100644 (file)
@@ -344,13 +344,16 @@ do_friend (ctype, declarator, decl, parmdecls, flags, quals, funcdef_flag)
          if (is_friend_template)
            decl = DECL_TI_TEMPLATE (push_template_decl (decl));
 
-         if (TYPE_SIZE (ctype) != 0 
-             && template_class_depth (ctype) == 0)
+         if (TYPE_SIZE (ctype) != 0 && template_class_depth (ctype) == 0)
            decl = check_classfn (ctype, decl);
 
+         /* TYPE_BEING_DEFINED is a hack for nested classes having
+             member functions of the enclosing class as friends. Will
+             go away as parsing of classes gets rewritten. */
          if (TREE_TYPE (decl) != error_mark_node)
            {
-             if (TYPE_SIZE (ctype) || template_class_depth (ctype) > 0)
+             if (TYPE_BEING_DEFINED (ctype) ||
+                 TYPE_SIZE (ctype) || template_class_depth (ctype) > 0)
                add_friend (current_class_type, decl);
              else
                cp_error ("member `%D' declared as friend before type `%T' defined",