Commit 842562b4 by Jason Merrill Committed by Jason Merrill

PR c++/80150 - ICE with overloaded variadic deduction.

	* pt.c (try_one_overload): Remove asserts.

From-SVN: r246422
parent de2b3f5c
2017-03-23 Jason Merrill <jason@redhat.com>
PR c++/80150 - ICE with overloaded variadic deduction.
* pt.c (try_one_overload): Remove asserts.
PR c++/77563 - missing ambiguous conversion error.
* call.c (convert_like_real): Use LOOKUP_IMPLICIT.
......
......@@ -19694,9 +19694,10 @@ try_one_overload (tree tparms,
is equivalent to the corresponding explicitly specified argument.
We may have deduced more arguments than were explicitly specified,
and that's OK. */
gcc_assert (ARGUMENT_PACK_INCOMPLETE_P (oldelt));
gcc_assert (ARGUMENT_PACK_ARGS (oldelt)
== ARGUMENT_PACK_EXPLICIT_ARGS (oldelt));
/* We used to assert ARGUMENT_PACK_INCOMPLETE_P (oldelt) here, but
that's wrong if we deduce the same argument pack from multiple
function arguments: it's only incomplete the first time. */
tree explicit_pack = ARGUMENT_PACK_ARGS (oldelt);
tree deduced_pack = ARGUMENT_PACK_ARGS (elt);
......
// PR c++/80150
// { dg-do compile { target c++11 } }
template <typename R, typename... Args>
bool compare_functions(R(*funcA)(Args...), R(*funcB)(Args...), Args... args) {
return false;
}
int foo(int x) {
return x;
}
float foo(float x) {
return x;
}
int main() {
int a = 10;
compare_functions<int>(foo, foo, a);
}
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