===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v
retrieving revision 1.1016
retrieving revision 1.1017
diff -u -r1.1016 -r1.1017
--- gcc/gcc/cp/decl.c	2003/03/09 14:30:18	1.1016
+++ gcc/gcc/cp/decl.c	2003/03/10 06:22:26	1.1017
@@ -9958,11 +9958,49 @@
 {
   tree fields[4];
   tree t;
+  tree method_type;
+  tree arg_type;
   tree unqualified_variant = NULL_TREE;
 
   if (type == error_mark_node)
     return type;
 
+  /* If the METHOD_TYPE has any default parameters, make a copy that
+     does not have the default parameters.  The pointer-to-member type
+     never has default parameters.  */
+  method_type = TREE_TYPE (type);
+  for (arg_type = TYPE_ARG_TYPES (method_type);
+       arg_type;
+       arg_type = TREE_CHAIN (arg_type))
+    if (TREE_PURPOSE (arg_type))
+      {
+	/* At least one parameter has a default argument.  */
+	tree arg_types = NULL_TREE;
+	tree *arg_type_p = &arg_types;
+
+	/* Copy the parameter types.  The "this" parameter will be
+	   added by build_cplus_method_type.  */
+	for (arg_type = TREE_CHAIN (TYPE_ARG_TYPES (method_type));
+	     arg_type;
+	     arg_type = TREE_CHAIN (arg_type))
+	  {
+	    if (arg_type == void_list_node)
+	      *arg_type_p = void_list_node;
+	    else
+	      *arg_type_p = build_tree_list (NULL_TREE,
+					     TREE_VALUE (arg_type));
+	    arg_type_p = &TREE_CHAIN (*arg_type_p);
+	  }
+	/* Build the new METHOD_TYPE.  */
+	method_type = build_cplus_method_type (TYPE_METHOD_BASETYPE (method_type), 
+					       TREE_TYPE (method_type), 
+					       arg_types);
+	/* Build the new POINTER_TYPE.  */
+	type = cp_build_qualified_type (build_pointer_type (method_type),
+					cp_type_quals (type));
+	break;
+      }
+
   /* If a canonical type already exists for this type, use it.  We use
      this method instead of type_hash_canon, because it only does a
      simple equality check on the list of field members.  */
