re PR c++/8660 (template overloading ICE in tsubst_expr, at cp/pt.c:7644)

PR c++/8660
        * decl2.c (check_classfn): A member template only matches a
        member template.

From-SVN: r64166
This commit is contained in:
Jason Merrill 2003-03-11 05:33:28 -05:00 committed by Jason Merrill
parent b772d2f592
commit 5b8e011cf6
2 changed files with 16 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2003-03-11 Jason Merrill <jason@redhat.com>
PR c++/8660
* decl2.c (check_classfn): A member template only matches a
member template.
2003-03-11 Neil Booth <neil@daikokuya.co.uk>
* Make-lang.in (CXX_C_OBJS): Update.

View File

@ -655,6 +655,7 @@ tree
check_classfn (tree ctype, tree function)
{
int ix;
int is_template;
if (DECL_USE_TEMPLATE (function)
&& !(TREE_CODE (function) == TEMPLATE_DECL
@ -672,6 +673,10 @@ check_classfn (tree ctype, tree function)
find the method, but we don't complain. */
return NULL_TREE;
/* OK, is this a definition of a member template? */
is_template = (TREE_CODE (function) == TEMPLATE_DECL
|| (processing_template_decl - template_class_depth (ctype)));
ix = lookup_fnfields_1 (complete_type (ctype),
DECL_CONSTRUCTOR_P (function) ? ctor_identifier :
DECL_DESTRUCTOR_P (function) ? dtor_identifier :
@ -704,6 +709,11 @@ check_classfn (tree ctype, tree function)
if (DECL_STATIC_FUNCTION_P (fndecl)
&& TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
p1 = TREE_CHAIN (p1);
/* A member template definition only matches a member template
declaration. */
if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
continue;
if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
TREE_TYPE (TREE_TYPE (fndecl)))