call.c (build_new_op): Give better error for syntactically correct...

* call.c (build_new_op): Give better error for syntactically
 	correct, but semantically invalid, use of undeclared template.

From-SVN: r15506
This commit is contained in:
Jason Merrill 1997-09-17 02:23:05 +00:00 committed by Jason Merrill
parent 6c1d570678
commit d5467e204a
2 changed files with 12 additions and 1 deletions

View File

@ -1,5 +1,8 @@
Tue Sep 16 14:06:56 1997 Jason Merrill <jason@yorick.cygnus.com>
* call.c (build_new_op): Give better error for syntactically
correct, but semantically invalid, use of undeclared template.
* call.c (compare_qual): Handle pmfs.
* decl.c (store_parm_decls): last_parm_cleanup_insn is the insn

View File

@ -4421,7 +4421,7 @@ build_user_type_conversion_1 (totype, expr, flags)
(USER_CONV,
(DECL_CONSTRUCTOR_P (cand->fn)
? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
NULL_TREE, cand->fn, cand->convs, cand->basetype_path);
expr, cand->fn, cand->convs, cand->basetype_path);
ICS_USER_FLAG (cand->second_conv) = 1;
if (cand->viable == -1)
ICS_BAD_FLAG (cand->second_conv) = 1;
@ -4672,6 +4672,14 @@ build_new_op (code, flags, arg1, arg2, arg3)
|| arg3 == error_mark_node)
return error_mark_node;
/* This can happen if a template takes all non-type parameters, e.g.
undeclared_template<1, 5, 72>a; */
if (code == LT_EXPR && TREE_CODE (arg1) == TEMPLATE_DECL)
{
cp_error ("`%D' must be declared before use", arg1);
return error_mark_node;
}
if (code == MODIFY_EXPR)
{
code2 = TREE_CODE (arg3);