c++: fold function template args sooner [PR101460]
authorJason Merrill <jason@redhat.com>
Mon, 30 Aug 2021 13:44:28 +0000 (09:44 -0400)
committerJason Merrill <jason@redhat.com>
Mon, 30 Aug 2021 21:23:28 +0000 (17:23 -0400)
commita8de832470f78a40a0e2c8de866a471bf74bf0ab
treeb4c322aa99ae5649ec56af1b228c1304f2a2c68d
parenta7083b83e45852540a4a09ee11b74dc28d777399
c++: fold function template args sooner [PR101460]

As discussed in the PR, we were giving a lot of unnecessary errors for this
testcase because we didn't try to do constant evaluation until
convert_nontype_argument, which happens for each of the candidates.  But
when looking at a template-id as the function operand of a call, we can try
to fold arguments before we get into overload resolution.

PR c++/101460

gcc/cp/ChangeLog:

* cp-tree.h (cxx_constant_value_sfinae): Declare.
* constexpr.c (cxx_constant_value_sfinae): New.
* pt.c (fold_targs_r, maybe_fold_fn_template_args): New.
(tsubst_copy_and_build) [CALL_EXPR]: Call
maybe_fold_fn_template_args.

gcc/testsuite/ChangeLog:

* g++.dg/template/explicit-args6.C: New test.
gcc/cp/constexpr.c
gcc/cp/cp-tree.h
gcc/cp/pt.c
gcc/testsuite/g++.dg/template/explicit-args6.C [new file with mode: 0644]