pt.c (check_default_tmpl_args): Handle friends defined in the class just like member functions defined in the class.

* pt.c (check_default_tmpl_args): Handle friends defined in the
	class just like member functions defined in the class.

From-SVN: r28097
This commit is contained in:
Mark Mitchell 1999-07-14 10:57:21 +00:00 committed by Mark Mitchell
parent 7e7b6c1995
commit 5937a6f93a
3 changed files with 29 additions and 4 deletions

View File

@ -1,3 +1,8 @@
1999-07-14 Mark Mitchell <mark@codesourcery.com>
* pt.c (check_default_tmpl_args): Handle friends defined in the
class just like member functions defined in the class.
1999-07-09 Michael Tiemann <tiemann@happy.cygnus.com>
Jason Merrill <jason@yorick.cygnus.com>

View File

@ -2211,12 +2211,17 @@ check_default_tmpl_args (decl, parms, is_primary, is_partial)
if (current_class_type
&& !TYPE_BEING_DEFINED (current_class_type)
&& DECL_REAL_CONTEXT (decl) == current_class_type
&& DECL_LANG_SPECIFIC (decl)
&& DECL_DEFINED_IN_CLASS_P (decl))
/* If this is either a friend defined in the scope of the class
or a member function. */
&& DECL_CLASS_CONTEXT (decl) == current_class_type
/* And, if it was a member function, it really was defined in
the scope of the class. */
&& (!DECL_FUNCTION_MEMBER_P (decl) || DECL_DEFINED_IN_CLASS_P (decl)))
/* We already checked these parameters when the template was
declared, so there's no need to do it again now. This is an
inline member function definition. */
declared, so there's no need to do it again now. This function
was defined in class scope, but we're processing it's body now
that the class is complete. */
return;
if (TREE_CODE (decl) != TYPE_DECL || is_partial || !is_primary)

View File

@ -0,0 +1,15 @@
// Build don't link:
// Origin: Mark Mitchell <mark@codesourcery.com>
template <class T = int>
struct S
{
void g ()
{
}
friend void f (double)
{
}
};