I agree with the “small, self-contained” aspect. This feels like the sort of feature that’s isolated enough that it’s really just a question of “what are the exact semantics?” and “is the implementation effort commensurate with the benefit?”.
Actually, another benefit: this, along with privacy, gives library writers a way to create structs you can’t exhaustively match, but still explicitly construct. i.e. let’s say you have:
struct Whatsis {
pub thingy: i32,
pub hoozits: &'static str,
inexhaustive: () = ()
}
This means you can let users construct as Whatsis { thingy: 42, hoozits: "blammo", .. } rather than the equivalent (but more opaque) Whatsis::new(42, hoozits), and still being able to add fields in the future (provided they can be defaulted).