::never-say-never
The !
type. In stable Rust. Since 1.14.0
.
Better than an enum Never {}
definition would be, since an instance of
type !
automagically coerces to any type, whereas an instance of
enum EmptyEnum {}
needs an explicit match it {}
.
::core::convert::Infallible
] is a sad instance of the
latter.That is, the following fails to compile:
rust ,compile_fail
let x: u32 = match <u32 as TryFrom<u8>>::try_from(42) {
| Ok(it) => it,
| Err(unreachable) => unreachable, // Error, expected `u32`, found `Infallible`
};
but the following doesn't!
```rust use ::neversaynever::Never;
let x: u32 = match Ok::<_, Never>(42) { | Ok(it) => it, | Err(unreachable) => unreachable, }; ```