https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94890
Marek Polacek <mpolacek at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |mpolacek at gcc dot gnu.org
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
My current theory is that it is not a bug.
While processing "decltype(aa<h>(0))" we look for a suitable aa candidate, and
thanks to C++20 paren-init "g(0)" in "decltype(g(0))" succeeds. Then we select
aa(int) rather than aa(...) and due to various SFINAEs we end up choosing the
explicit k(l) constructor. In C++17 the paren-init doesn't kick in and we
select "k(...)". So in C++20 when actually converting {0} to S we hit:
7426 /* When converting from an init list we consider explicit
7427 constructors, but actually trying to call one is an error. */
(DR 1518 + DR 1630)
This fails in C++17 too when
template <class g, class = decltype(g(0))> f aa(int);
is changed to
template <class g, class = decltype(g{0})> f aa(int);