I realize the code is not very useful, but I do find it somewhat surprising that create(3) as u8 != 3. Of course this only happens with enums that have two variants, one represented with 0 and the other with 1.
So if I understand correctly, #[non_exhaustive] means users of the enum should not exhaustively match on it, not because other values are possible but to protect themselves from variants being added in a later version?
It doesn’t. And you can tell that, since the create that defined the enum is still allowed to have arms only for the defined variants in a match – thereby not defining what will happen for other bit patterns.