can not use Arc<dyn trait> with atom
jiacai2050 opened this issue · 1 comments
jiacai2050 commented
Demo
trait Engine {
fn eval(&self) -> String;
}
struct JSEngine {
name: String,
}
impl Engine for JSEngine {
fn eval(&self) -> String {
"js eval".to_string()
}
}
fn main() {
let engine: Arc<dyn Engine> = Arc::new(JSEngine {
name: "js1".to_string(),
});
println!("Results: {}", engine.eval());
let shared_atom = Atom::new(engine);
}
error[E0277]: the size for values of type `dyn Engine` cannot be known at compilation time
--> src/bin/main.rs:36:33
|
36 | let shared_atom = Atom::new(engine);
| ^^^^^^ doesn't have a size known at compile-time
|
= help: the trait `std::marker::Sized` is not implemented for `dyn Engine`
= note: required because of the requirements on the impl of `atom::IntoRawPtr` for `std::sync::Arc<dyn Engine>`
= note: required by `atom::Atom::<P>::new`
error[E0277]: the size for values of type `dyn Engine` cannot be known at compilation time
--> src/bin/main.rs:36:23
|
36 | let shared_atom = Atom::new(engine);
| ^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
:::~/.cargo/registry/src/github.com-1ecc6299db9ec823/atom-0.4.0/src/lib.rs:29:8
|
29 | P: IntoRawPtr + FromRawPtr,
| ---------- required by this bound in `atom::Atom`
|
= help: the trait `std::marker::Sized` is not implemented for `dyn Engine`
= note: required because of the requirements on the impl of `atom::IntoRawPtr` for `std::sync::Arc<dyn Engine>`
error: aborting due to 2 previous errors; 2 warnings emitted
For more information about this error, try `rustc --explain E0277`.
error: could not compile `foo`.
To learn more, run the command again with --verbose.
jiacai2050 commented
upstream issue