https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100992

--- Comment #7 from Tomasz KamiƄski <tkaminsk at gcc dot gnu.org> ---
And to unpack:
constructing F out of const tuple<tuple<F>>&,
may only use F(const tuple<F>&) constructor,
which requires constructing tuple<F> out of tuple<tuple<F>>.

For that we have two candiates:
tuple<F>(const tuple<U>& u) [U = tuple<F>], that has constrain
that is_convertible_v<decltype(u), T>, is_constructible_v<T, decltype(u)>, and
is_same_v<T, U>. Checking is_constructible_v<T, decltype(u)> is equivalent to
check of is_construcbile_v<F, const tuple<tuple<F>>> (seem to be infinite
recursion).

tuple<F>(U&& u) [U = tuple<tuple<F>> const&]
checks is_constructible_v<F, const tuple<tuple<F>>>.

So both are ending with constrains recursion per standard.

Reply via email to