re PR c++/9778 (ICE with sizeof(expr) in non-type template arg)

2003-02-24  Jeffrey D. Oldham  <oldham@codesourcery.com>

	PR c++/9778
	* cp/pt.c (tsubst_copy_and_build): For a templated function inside a
	scope, process template arguments.
	* testsuite/g++.dg/parse/template6.C: New test case.

From-SVN: r63379
This commit is contained in:
Jeffrey D. Oldham 2003-02-24 20:39:38 +00:00 committed by Jeffrey D. Oldham
parent 57df94c8f6
commit 8b6a662e3e
3 changed files with 27 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2003-02-24 Jeffrey D. Oldham <oldham@codesourcery.com>
PR c++/9778
* pt.c (tsubst_copy_and_build): For a templated function inside a
scope, process template arguments.
2003-02-24 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/9602

View File

@ -8137,7 +8137,7 @@ tsubst_copy_and_build (t, args, complain, in_decl)
if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
name = build_nt (TEMPLATE_ID_EXPR,
TREE_OPERAND (name, 0),
TREE_OPERAND (name, 1));
build_expr_from_tree (TREE_OPERAND (name, 1)));
function = resolve_scoped_fn_name (TREE_OPERAND (function, 0),
name);

View File

@ -0,0 +1,20 @@
// { dg-do compile }
// Copyright (C) 2003 Free Software Foundation, Inc.
// Contributed by Wolfgang Bangerth <bangerth@ticam.utexas.edu> 20 Feb 2003.
// PR c++/9778. Ensure templated functions in other namespaces are
// correctly instantiated.
namespace NS {
template <int N> void foo ();
}
template <int N> struct X {
int m;
void g () {
NS::foo<sizeof(m)>();
}
};
template class X<2>;