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:
parent
b772d2f592
commit
5b8e011cf6
|
@ -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.
|
||||
|
|
|
@ -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 :
|
||||
|
@ -705,6 +710,11 @@ check_classfn (tree ctype, tree function)
|
|||
&& 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)))
|
||||
&& compparms (p1, p2)
|
||||
|
|
Loading…
Reference in New Issue