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:
parent
11e74ea6c6
commit
4f96ff63b3
|
@ -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.
|
||||
|
|
13
gcc/cp/pt.c
13
gcc/cp/pt.c
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue