Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #![allow(unused_imports)]
- use std::sync::{RwLock, RwLockWriteGuard};
- struct Struct(());
- trait Trait<T> {
- fn add(&mut self, _key: i32, _value: T) {}
- fn remove(&mut self, _key: i32) {}
- }
- impl Trait<String> for Struct {}
- impl Trait<usize> for Struct {}
- fn main () {
- {
- let mut value = Struct(());
- value.add(123, String::new());
- Trait::<String>::remove(&mut value, 123);
- }
- {
- let mut value = RwLock::new(Struct(()));
- let value_lock: RwLockWriteGuard<Struct> = value.write().unwrap();
- value_lock.add(123, String::new());
- // type annotations needed
- //value_lock.remove(123);
- // the trait bound `std::sync::RwLockWriteGuard<'_, Struct>: Trait<std::string::String>` is not satisfied
- //Trait::<String>::remove(&mut value_lock, 123);
- // non-primitive cast: `std::sync::RwLockWriteGuard<'_, Struct>` as `std::sync::RwLockWriteGuard<'_, dyn Trait<std::string::String>>`
- //(value_lock as RwLockWriteGuard::<dyn Trait::<String>>).remove(123);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement