+1998-11-24 Graham <grahams@rcp.co.uk>
+
+ * typeck.c (build_component_ref): Remove unused statement.
+
1998-11-24 Jason Merrill <jason@yorick.cygnus.com>
+ * class.c (add_method): Catch invalid overloads.
+
* class.c (add_method): Build up OVERLOADs properly for conversion ops.
* search.c (lookup_conversions): Handle getting real OVERLOADs.
(add_conversions): Likewise. Revert last change.
if (TREE_CODE (method) != TEMPLATE_DECL)
{
+ /* [over.load] Member function declarations with the
+ same name and the same parameter types cannot be
+ overloaded if any of them is a static member
+ function declaration. */
+ if (DECL_STATIC_FUNCTION_P (fn)
+ != DECL_STATIC_FUNCTION_P (method))
+ {
+ tree parms1 = TYPE_ARG_TYPES (TREE_TYPE (fn));
+ tree parms2 = TYPE_ARG_TYPES (TREE_TYPE (method));
+
+ if (! DECL_STATIC_FUNCTION_P (fn))
+ parms1 = TREE_CHAIN (parms1);
+ else
+ parms2 = TREE_CHAIN (parms2);
+
+ if (compparms (parms1, parms2))
+ cp_error ("`%#D' and `%#D' cannot be overloaded",
+ fn, method);
+ }
+
/* Since this is an ordinary function in a
non-template class, it's mangled name can be
used as a unique identifier. This technique
&& TREE_CODE (TREE_VALUE (fndecls)) == FUNCTION_DECL
&& DECL_STATIC_FUNCTION_P (TREE_VALUE (fndecls)))
{
- tree fndecl;
-
- basetype = TYPE_MAIN_VARIANT (TREE_PURPOSE (fndecls));
- fndecl = TREE_VALUE (fndecls);
+ tree fndecl = TREE_VALUE (fndecls);
enforce_access (TREE_PURPOSE (fndecls), fndecl);
mark_used (fndecl);
return fndecl;