Rust errors / Types and traits
Rust compiler error · checked with rustc 1.99.0
Rust error E0321: cross-crate traits with a default impl, like `Send`, can only be implemented for a struct/enum type, not `&'static Foo`
What it meansA cross-crate opt-out trait was implemented on something which wasn't a struct or enum type.
What rustc prints
error[E0321]: cross-crate traits with a default impl, like `Send`, can only be implemented for a struct/enum type, not `&'static Foo`
--> main.rs:7:1
|
7 | unsafe impl Send for &'static Foo {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't implement cross-crate trait with a default impl for non-struct/enum typeReal output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
A cross-crate opt-out trait was implemented on something which wasn't a struct or enum type.
Erroneous code example:
#![feature(auto_traits)]
struct Foo;
impl !Sync for Foo {}
unsafe impl Send for &'static Foo {}
// error: cross-crate traits with a default impl, like `core::marker::Send`,
// can only be implemented for a struct/enum type, not
// `&'static Foo`
Only structs and enums are permitted to impl Send, Sync, and other opt-out trait, and the struct or enum must be local to the current crate. So, for example, unsafe impl Send for Rc<Foo> is not allowed.
From rustc --explain E0321 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0308mismatched types
- E0277the trait bound is not satisfied
- E0599no method named X found in the current scope
- E0433failed to resolve
- E0307invalid `self` parameter type: `&Bar`
- E0322explicit impls for the `Sized` trait are not permitted
- E0323item `N` is an associated const, which doesn't match its trait `Foo`
Up next
Often hit nextE0308: mismatched typesA related error from the same family.Read it next →Did this answer your question?