https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91780
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|needs-reduction | --- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> --- Reduced: template<typename T> struct add_pointer { using type = T*; }; template<typename T> struct add_pointer<T&> { using type = T*; }; template<typename T> struct add_pointer<T&&> { using type = T*; }; template<typename T> using add_pointer_t = typename add_pointer<T>::type; template<typename... T> struct first { }; template<typename T, typename... U> struct first<T, U...> { using type = T; }; template<typename... T> using first_t = typename first<T...>::type; template <typename... Containers> struct zip { template <typename... Container_types> zip(Containers... containers) : containers_{ &containers... } { } add_pointer_t<first_t<Containers...>> containers_[sizeof...(Containers)]; }; template <typename... Container_types> zip(Container_types&&... containers) -> zip<Container_types...>; struct vector { int i = 0; }; int main() { vector v1, v2; zip z(v1, v2); z.containers_[0]->i = 1; z.containers_[1]->i = 2; if (v1.i == 0) throw 1; }