Usando std::applica con pacchetti variadic

Usando std::applica con pacchetti variadic

Primo parametro di std::apply dovrebbe essere un funtore con la stessa ariità del numero di elementi della tupla, quindi nel tuo caso variadico:

template <typename ...Ts>
struct A : public Base{
    std::tuple<Ts...> as;
    A(Ts... pack) : as(pack...){}

    void base_function(){
        std::apply([](auto&... ts){(ts.base_function(), ...);}, as);
    }
};

std::apply non sta facendo quello che pensi. Serve per passare una tupla di parametri a una funzione (tipo Callable). In altre parole, la tupla stessa non ha una funzione chiamata base_function . vedere https://en.cppreference.com/w/cpp/utility/apply