@@ -67,23 +67,23 @@ trait Seq<T> {
67
67
Object safe traits can be the base trait of a [ trait object] . A trait is
68
68
* object safe* if it has the following qualities (defined in [ RFC 255] ):
69
69
70
- * It must not require ` Self: Sized `
71
- * All associated functions must either have a ` where Self: Sized ` bound, or
72
- * Not have any type parameters (although lifetime parameters are allowed),
73
- and
74
- * Be a [ method] that does not use ` Self ` except in the type of the receiver.
70
+ * All [ supertraits] must also be object safe.
71
+ * ` Sized ` must not be a [ supertrait] [ supertraits ] . In other words, it must not require ` Self: Sized ` .
75
72
* It must not have any associated constants.
76
- * All supertraits must also be object safe.
77
-
78
- When there isn't a ` Self: Sized ` bound on a method, the type of a method
79
- receiver must be one of the following types:
80
-
81
- * ` &Self `
82
- * ` &mut Self `
83
- * [ ` Box<Self> ` ]
84
- * [ ` Rc<Self> ` ]
85
- * [ ` Arc<Self> ` ]
86
- * [ ` Pin<P> ` ] where ` P ` is one of the types above
73
+ * All associated functions must either be dispatchable from a trait object or be explicitly non-dispatchable:
74
+ * Dispatchable functions require:
75
+ * Not have any type parameters (although lifetime parameters are allowed),
76
+ * Be a [ method] that does not use ` Self ` except in the type of the receiver.
77
+ * Have a receiver with one of the following types:
78
+ * ` &Self ` (i.e. ` &self ` )
79
+ * ` &mut Self ` (i.e ` &mut self ` )
80
+ * [ ` Box<Self> ` ]
81
+ * [ ` Rc<Self> ` ]
82
+ * [ ` Arc<Self> ` ]
83
+ * [ ` Pin<P> ` ] where ` P ` is one of the types above
84
+ * Does not have a ` where Self: Sized ` bound (reciever type of ` Self ` (i.e. ` self ` ) implies this).
85
+ * Explicitly non-dispatchable functions require:
86
+ * Have a ` where Self: Sized ` bound (reciever type of ` Self ` (i.e. ` self ` ) implies this).
87
87
88
88
``` rust
89
89
# use std :: rc :: Rc ;
@@ -325,6 +325,7 @@ fn main() {
325
325
[ RFC 255 ] : https://github.com/rust-lang/rfcs/blob/master/text/0255-object-safety.md
326
326
[ associated items ] : associated-items.md
327
327
[ method ] : associated-items.md#methods
328
+ [ supertraits ] : #supertraits
328
329
[ implementations ] : implementations.md
329
330
[ generics ] : generics.md
330
331
[ where clauses ] : generics.md#where-clauses
0 commit comments