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

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note you don't need the extra template int argument either to reproduce the
failure:
```

template <typename X> struct Bar {
    void accept(X value) { }
};

template <typename...> struct Foo;

template <typename... Ts>
struct Foo<Bar<Ts>...> : Bar<Ts>... {
    template <typename T, template <typename> class B = ::Bar>
    constexpr static Bar<T>* slice_by_type(B<T>* self) {
        return self;
    }

    template <typename... Us>
    void accept(Us... values) {
        (slice_by_type<Us>(this)->accept(values), ...);
    }
};

int main() {
    Foo<Bar<float>, Bar<int>> foo;
    foo.accept(3.14f, 10);
}
```

Reply via email to