I don't have any practical experience with the language, but based on the spec, it sounds like Ada generics would have much the same problem wrt compilation times as C++ templates do, at least if you try to fully optimize them (i.e. avoid boxing and similar techniques to allow generic code to be compiled just once, instead of once for every unique instantiation in every translation unit).
Not really, they need to be explicitly defined before use.
Which then thanks to packages, they can be reused across several projects when similar type parameters are required.
So you only generate List(T => Integer) once for the whole project, when project architecture is properly done.
A scenario that eventually might be possible in C++, around C++23 time frame, taking into consideration how long the modules infrastructure might need to mature.