Rollup merge of #75190 - GuillaumeGomez:cleanup-e0746, r=Dylan-DPC
Clean up E0746 explanation r? @Dylan-DPC
This commit is contained in:
commit
f49e47348d
@ -1,4 +1,4 @@
|
||||
Return types cannot be `dyn Trait`s as they must be `Sized`.
|
||||
An unboxed trait object was used as a return value.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
@ -13,11 +13,13 @@ impl T for S {
|
||||
|
||||
// Having the trait `T` as return type is invalid because
|
||||
// unboxed trait objects do not have a statically known size:
|
||||
fn foo() -> dyn T {
|
||||
fn foo() -> dyn T { // error!
|
||||
S(42)
|
||||
}
|
||||
```
|
||||
|
||||
Return types cannot be `dyn Trait`s as they must be `Sized`.
|
||||
|
||||
To avoid the error there are a couple of options.
|
||||
|
||||
If there is a single type involved, you can use [`impl Trait`]:
|
||||
@ -32,7 +34,7 @@ If there is a single type involved, you can use [`impl Trait`]:
|
||||
# }
|
||||
// The compiler will select `S(usize)` as the materialized return type of this
|
||||
// function, but callers will only know that the return type implements `T`.
|
||||
fn foo() -> impl T {
|
||||
fn foo() -> impl T { // ok!
|
||||
S(42)
|
||||
}
|
||||
```
|
||||
@ -57,7 +59,7 @@ impl T for O {
|
||||
|
||||
// This now returns a "trait object" and callers are only be able to access
|
||||
// associated items from `T`.
|
||||
fn foo(x: bool) -> Box<dyn T> {
|
||||
fn foo(x: bool) -> Box<dyn T> { // ok!
|
||||
if x {
|
||||
Box::new(S(42))
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user