diff options
author | Mark Mitchell <mark@codesourcery.com> | 1999-07-14 10:57:21 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1999-07-14 10:57:21 +0000 |
commit | 5937a6f93a56beddfde2c2ae0e14a2ec79d96283 (patch) | |
tree | 7554efd89f6688b8dfc2293692068aaa59ed70eb | |
parent | 7e7b6c199549f404f705d40a8f10a1289b7bdeb7 (diff) | |
download | gcc-5937a6f93a56beddfde2c2ae0e14a2ec79d96283.zip gcc-5937a6f93a56beddfde2c2ae0e14a2ec79d96283.tar.gz gcc-5937a6f93a56beddfde2c2ae0e14a2ec79d96283.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/defarg9.C | 15 |
3 files changed, 29 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6edfa5f..fdc4b70 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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> diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d591c46..00e17be 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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) diff --git a/gcc/testsuite/g++.old-deja/g++.pt/defarg9.C b/gcc/testsuite/g++.old-deja/g++.pt/defarg9.C new file mode 100644 index 0000000..f9de4aa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/defarg9.C @@ -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) + { + } +}; + |