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;
}