pt.c (lookup_template_class): Build complete template arguments for BOUND_TEMPLATE_TEMPLATE_PARM.

* pt.c (lookup_template_class): Build complete template arguments
	for BOUND_TEMPLATE_TEMPLATE_PARM.

From-SVN: r46245
This commit is contained in:
Kriang Lerdsuwanakij 2001-10-13 15:00:44 +00:00 committed by Kriang Lerdsuwanakij
parent 11e74ea6c6
commit 4f96ff63b3
3 changed files with 35 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2001-10-13 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
* pt.c (lookup_template_class): Build complete template arguments
for BOUND_TEMPLATE_TEMPLATE_PARM.
2001-10-12 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
* cp-tree.h (TYPE_BINFO): Update comment.

View File

@ -3913,6 +3913,19 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain)
parmlist = DECL_INNERMOST_TEMPLATE_PARMS (template);
/* Consider an example where a template template parameter declared as
template <class T, class U = std::allocator<T> > class TT
The template parameter level of T and U are one level larger than
of TT. To proper process the default argument of U, say when an
instantiation `TT<int>' is seen, we need to build the full
arguments containing {int} as the innermost level. Outer levels
can be obtained from `current_template_args ()'. */
if (processing_template_decl)
arglist = add_to_template_args (current_template_args (), arglist);
arglist2 = coerce_template_parms (parmlist, arglist, template,
complain, /*require_all_args=*/1);
if (arglist2 == error_mark_node)

View File

@ -0,0 +1,17 @@
// Copyright (C) 2001 Free Software Foundation
// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
// { dg-do compile }
template <class U> struct Alloc {};
template <class T, class U = Alloc<T> > struct Vector {};
template <template <class T, class U = Alloc<T> > class TT>
struct C {
TT<int> tt;
};
int main()
{
C<Vector> c;
}