https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91780
--- Comment #11 from Jonathan Wakely <redi at gcc dot gnu.org> --- Can't you just change your constructor to this? zip(Containers&&... containers) : containers_(std::forward<Containers>(containers)...) { } The problematic deduction seems to only happen because of the odd constructor with an unused parameter pack that gets deduced as empty.