https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88312
Bug ID: 88312 Summary: [9 regression] Mishandled explicitly provided parameter pack Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: m.cencora at gmail dot com Target Milestone: --- Following program fails to compile with latest gcc, while it compiles with gcc 8 and earlier, and with clang as well. #include <type_traits> #include <utility> template <std::size_t N, typename ...Ts> struct nth_type { private: template <typename ...Vs, typename Head, typename ...Tail> static Head call2(Vs..., Head, Tail...); template <std::size_t ...Ints, typename ...Us> static auto call(std::index_sequence<Ints...>, Us... us) -> decltype(call2<decltype(Ints)...>(us...)); public: using type = decltype(call(std::make_index_sequence<N>(), Ts{}...)); }; template <std::size_t N, typename ...Ts> using nth_type_t = typename nth_type<N, Ts...>::type; static_assert(std::is_same<nth_type_t<0, float, bool, char>, float>()); static_assert(std::is_same<nth_type_t<1, float, bool, char>, bool>()); static_assert(std::is_same<nth_type_t<2, float, bool, char>, char>());