Skip to content

Commit b2cf9a0

Browse files
committed
Add impl From<!> for Infallible
The reverse conversion unfortunately causes unexpected errors like: ``` error[E0277]: the trait bound `!: std::convert::From<()>` is not satisfied --> src/librustc_metadata/encoder.rs:105:9 | 105 | self.emit_usize(seq.len)?; | ^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<()>` is not implemented for `!` | = help: the following implementations were found: <! as std::convert::From<std::convert::Infallible>> = note: the trait is implemented for `()`. Possibly this error has been caused by changes to Rust's type-inference algorithm (see: #48950 for more info). Consider whether you meant to use the type `()` here instead. = note: required by `std::convert::From::from` ``` I don’t understand why this error happens. If I’m reading the code correctly the return types of `emit_usize` and of the method that contains line 105 are both `Result<(), !>`, so the expansion of the `?` operator should involve `!: From<!>`, not `From<()>`. Is this a type inference bug?
1 parent c80a8f5 commit b2cf9a0

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

Diff for: src/libcore/convert.rs

+7
Original file line numberDiff line numberDiff line change
@@ -596,3 +596,10 @@ impl PartialEq for Infallible {
596596

597597
#[stable(feature = "convert_infallible", since = "1.34.0")]
598598
impl Eq for Infallible {}
599+
600+
#[stable(feature = "convert_infallible", since = "1.34.0")]
601+
impl From<!> for Infallible {
602+
fn from(x: !) -> Self {
603+
x
604+
}
605+
}

0 commit comments

Comments
 (0)