Check out P1858, coming to Evolution soon (there's going to be a new revision in this mailing, but not much has changed since R1). If that direction gets approved, then these library utilities would be somewhat obsolete but these specializations could be added on top of existing language features:
template <typename T>
concept pack_like = requires { sizeof...(T::[:]); };
template <pack_like T> struct tuple_size<T> : integral_constant<size_t, sizeof...(T::[:])> { };
template <size_t I, pack_like T> struct tuple_element<I, T> { using type = T::[I]; };
template <size_t I, typename T>
requires pack_like<remove_cvref_t<T>>
decltype(auto) get(T&& t) {
return forward<T>(t).[I];
}