This is done for corner cases like this one, when you have only type declaration but no definition (std::is_constructible on incomplete types - in which case is_constructible is UB ):
struct B;
struct A {
    A(const A&) = default;
    A(const B&) {}
    A(A&&) = default;
    A() = default;
};
B&& getB();
template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args){
    static_assert((std::is_constructible_v<T, Args&&> && ...));
    (v.push_back(std::forward<Args>(args)), ...);
}
template<typename T, typename... Args>
void push_back_vec2(std::vector<T>& v, Args&&... args){
    static_assert((std::is_constructible_v<T, Args> && ...));
    (v.push_back(std::forward<Args>(args)), ...);
}
int main(int argc, char* argv[])
{
    std::vector<A> a;
    push_back_vec(a, A(), A());
    push_back_vec2(a, A(), A());
    A aa;
    push_back_vec(a, aa, aa, A());
    push_back_vec2(a, aa, aa, A());
    push_back_vec(a, getB());
    // code below won't compile
    //push_back_vec2(a, aa, A(), getB());
}
Live example