Commit 4f96ff63 by Kriang Lerdsuwanakij Committed by Kriang Lerdsuwanakij

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
parent 11e74ea6
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.
......
......@@ -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)
......
// 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment