Clean up E0746 explanation
This commit is contained in:
parent
3a92b9987a
commit
cd4633917d
1 changed files with 6 additions and 4 deletions
|
@ -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…
Reference in a new issue