re PR c++/6695 (Regression: template friend declaration doesn't work)

PR c++/6695
	* pt.c (tsubst_friend_class): Substitute into the context of the
	friend before using it.

	PR c++/6695
	* g++.dg/template/friend7.C: New file.

From-SVN: r55041
This commit is contained in:
Mark Mitchell 2002-06-27 21:45:56 +00:00 committed by Mark Mitchell
parent c8f863fc55
commit 5ce49b4b08
4 changed files with 45 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2002-06-27 Mark Mitchell <mark@codesourcery.com>
PR c++/6695
* pt.c (tsubst_friend_class): Substitute into the context of the
friend before using it.
2002-06-26 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (xref_tag): Change prototype.

View File

@ -4836,7 +4836,7 @@ tsubst_friend_class (friend_tmpl, args)
if (TREE_CODE (context) == NAMESPACE_DECL)
push_nested_namespace (context);
else
push_nested_class (context, 2);
push_nested_class (tsubst (context, args, tf_none, NULL_TREE), 2);
}
/* First, we look for a class template. */

View File

@ -1,3 +1,8 @@
2002-06-27 Mark Mitchell <mark@codesourcery.com>
PR c++/6695
* g++.dg/template/friend7.C: New file.
2002-06-27 Aldy Hernandez <aldyh@redhat.com>
* gcc.c-torture/execute/string-opt-8.c (strncmp): Fix typo in

View File

@ -0,0 +1,33 @@
// { dg-do compile }
template <typename V>
struct b
{
template <typename T>
class a
{
template <typename>
friend class a;
T t_;
public:
a() {}
a(a<T *> const &);
};
};
template <typename V>
template <typename T>
b<V>::a<T>::a(a<T *> const &rhs): t_(*rhs.t_)
{}
int
f ()
{
b<void *>::a<char *> q;
b<void *>::a<char> w(q);
return 0;
}