Commit 410c2fba by Kriang Lerdsuwanakij Committed by Jason Merrill

pt.c (process_template_parm): Accept TYPENAME_TYPE nodes.

	* pt.c (process_template_parm): Accept TYPENAME_TYPE nodes.
	(convert_nontype_argument): Handle cases when nontype template
	parameters become classes after substitution.

From-SVN: r20084
parent 8da801cf
1998-05-26 Kriang Lerdsuwanakij <lerdsuwa@scf.usc.edu>
* pt.c (process_template_parm): Accept TYPENAME_TYPE nodes.
(convert_nontype_argument): Handle cases when nontype template
parameters become classes after substitution.
1998-05-26 Mark Mitchell <mark@markmitchell.com> 1998-05-26 Mark Mitchell <mark@markmitchell.com>
* friend.c (is_friend): Use comptypes, rather than == to compare * friend.c (is_friend): Use comptypes, rather than == to compare
......
...@@ -1382,7 +1382,8 @@ process_template_parm (list, next) ...@@ -1382,7 +1382,8 @@ process_template_parm (list, next)
/* A template parameter is not modifiable. */ /* A template parameter is not modifiable. */
TREE_READONLY (parm) = 1; TREE_READONLY (parm) = 1;
if (IS_AGGR_TYPE (TREE_TYPE (parm)) if (IS_AGGR_TYPE (TREE_TYPE (parm))
&& TREE_CODE (TREE_TYPE (parm)) != TEMPLATE_TYPE_PARM) && TREE_CODE (TREE_TYPE (parm)) != TEMPLATE_TYPE_PARM
&& TREE_CODE (TREE_TYPE (parm)) != TYPENAME_TYPE)
{ {
cp_error ("`%#T' is not a valid type for a template constant parameter", cp_error ("`%#T' is not a valid type for a template constant parameter",
TREE_TYPE (parm)); TREE_TYPE (parm));
...@@ -2232,7 +2233,13 @@ convert_nontype_argument (type, expr) ...@@ -2232,7 +2233,13 @@ convert_nontype_argument (type, expr)
tree fns; tree fns;
tree fn; tree fn;
my_friendly_assert (TYPE_PTRMEMFUNC_P (type), 0); if (!TYPE_PTRMEMFUNC_P (type))
/* This handles templates like
template<class T, T t> void f();
when T is substituted with any class. The second template
parameter becomes invalid and the template candidate is
rejected. */
return error_mark_node;
/* For a non-type template-parameter of type pointer to member /* For a non-type template-parameter of type pointer to member
function, no conversions apply. If the template-argument function, no conversions apply. If the template-argument
......
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