]> git.lizzy.rs Git - rust.git/commitdiff
Clean up E0746 explanation
authorGuillaume Gomez <guillaume1.gomez@gmail.com>
Wed, 5 Aug 2020 12:14:21 +0000 (14:14 +0200)
committerGuillaume Gomez <guillaume1.gomez@gmail.com>
Wed, 5 Aug 2020 12:14:21 +0000 (14:14 +0200)
src/librustc_error_codes/error_codes/E0746.md

index 305667e58f8fb3afb669fd325738051b23763842..90755d47f67901188c93af03764be6c1985ab6f7 100644 (file)
@@ -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 {