-
Notifications
You must be signed in to change notification settings - Fork 14k
Open
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-dyn-traitArea: trait objects, vtable layoutArea: trait objects, vtable layoutA-error-handlingArea: Error handlingArea: Error handlingD-newcomer-roadblockDiagnostics: Confusing error or lint; hard to understand for new users.Diagnostics: Confusing error or lint; hard to understand for new users.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
I tried this code:
fn main() {
foo::<Bar>();
}
fn foo<T>() -> Result<T, T::Error>
where
T: TryFrom<i64, Error: std::error::Error>,
{
todo!();
}
struct Bar;
impl TryFrom<i64> for Bar {
type Error = Box<dyn std::error::Error>;
fn try_from(_: i64) -> Result<Self, Self::Error> {
Ok(Self)
}
}I expected to see this happen: It compile success.
Instead, this happened:
error[E0277]: the size for values of type `(dyn std::error::Error + 'static)` cannot be known at compilation time
--> src/main.rs:2:11
|
2 | foo::<Bar>();
| ^^^ doesn't have a size known at compile-time
|
= help: the trait `Sized` is not implemented for `(dyn std::error::Error + 'static)`
= help: the trait `std::error::Error` is implemented for `Box<E>`
= note: required for `Box<(dyn std::error::Error + 'static)>` to implement `std::error::Error`
note: required by a bound in `foo`
--> src/main.rs:7:28
|
5 | fn foo<T>() -> Result<T, T::Error>
| --- required by a bound in this function
6 | where
7 | T: TryFrom<i64, Error: std::error::Error>,
| ^^^^^^^^^^^^^^^^^ required by this bound in `foo`
For more information about this error, try `rustc --explain E0277`.
Meta
rustc --version --verbose:
rustc 1.91.0 (f8297e351 2025-10-28)
binary: rustc
commit-hash: f8297e351a40c1439a467bbbb6879088047f50b3
commit-date: 2025-10-28
host: x86_64-unknown-linux-gnu
release: 1.91.0
LLVM version: 21.1.2
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-dyn-traitArea: trait objects, vtable layoutArea: trait objects, vtable layoutA-error-handlingArea: Error handlingArea: Error handlingD-newcomer-roadblockDiagnostics: Confusing error or lint; hard to understand for new users.Diagnostics: Confusing error or lint; hard to understand for new users.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.