Hm.
struct S<T> {
init(_: T) {}
}
The struct should be inferred to be uninhabited when T: Uninhabited, but its layout tells us nothing about it. It's impossibility to construct a value of this type makes it uninhabited.
But inits aren't always visible. So automatic conformance to Uninhabited could be challenging.
It's certainly possible for enums and types with stored properties of uninhabited types. But in general case it seems a bit too much for an automated conformance.
Another example:
struct S {
init() { fatalError() }
}
Here we do have a callable init, and still this type is uninhabitable.
I guess there should be an option to manually conform to Uninhabited protocol (with where clause) that will require from a type to have no reachable ways to get a value.