Stabilize (only) the never type · Issue #58184 · rust-lang/rust (original) (raw)
Navigation Menu
- Explore
- Pricing
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Description
This is an alternative to #57012 that does not propose changing the type inference fallback (yet). This unblocks TryFrom
and TryInto
#33417.
#49593 has now been fixed. This was the reason for the previous revert of stabilization (#50121).
What is being stabilized
!
is now a full-fledged type and can now be used in any type position (eg. RFC 1216). The!
type can coerce into any other type, see https://github.com/rust-lang/rust/tree/master/src/test/run-fail/adjust_never.rs for an example.- The
never_type
feature gate is stable, although some of the behaviours it used to gate now live behind the newexhaustive_patterns
feature gate (see below).
What is not being stabilized
- Exhaustive pattern-matching for uninhabited types. eg.
let x: Result<u32, !> = ...;
let Ok(y) = x;
This code will still complain thatOk(_)
is a refutable pattern. This can be fixed by using theexhaustive_patterns
feature gate. See RFC 1872 for progress on this issue. See https://github.com/rust-lang/rust/tree/master/src/test/ui/feature-gate-exhaustive-patterns.rs for the testcase which confirms that this behaviour is still gated. - The type inference changes proposed in Summary issue - stabilization of ! #48950 are not part of this proposal, since they can break some previously-valid programs and the mitigations discussed in Stabilize never_type *again* #57012 are not ready yet.
This change is moved to a new dedicated feature gate,inference_fallback_to_never
, instead ofnever_type
.