]>
Commit | Line | Data |
---|---|---|
60c5eb7d | 1 | A cross-crate opt-out trait was implemented on something which wasn't a struct |
74b04a01 XL |
2 | or enum type. |
3 | ||
4 | Erroneous code example: | |
60c5eb7d XL |
5 | |
6 | ```compile_fail,E0321 | |
fc512014 | 7 | #![feature(auto_traits)] |
60c5eb7d XL |
8 | |
9 | struct Foo; | |
10 | ||
11 | impl !Sync for Foo {} | |
12 | ||
13 | unsafe impl Send for &'static Foo {} | |
14 | // error: cross-crate traits with a default impl, like `core::marker::Send`, | |
15 | // can only be implemented for a struct/enum type, not | |
16 | // `&'static Foo` | |
17 | ``` | |
18 | ||
19 | Only structs and enums are permitted to impl Send, Sync, and other opt-out | |
20 | trait, and the struct or enum must be local to the current crate. So, for | |
21 | example, `unsafe impl Send for Rc<Foo>` is not allowed. |