I too am not sure about what exactly you're trying to achieve. You say "private" generics, but I don't understand to whom they're private.
Anyway, if you're looking at this from an API author's perspective, it might be interesting to take a look at this pitch: Proposing to expand `available` to introduce `discouraged`. So in your case, with this feature or with a feature that hides underscore-prefixed types and declarations you could do:
struct C<_T> {
...
}
// or
struct C<
@available(discouraged: "Not meant for public use") T
> {
...
}