Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. #![allow(unused_imports)]
  2. use std::sync::{RwLock, RwLockWriteGuard};
  3.  
  4. struct Struct(());
  5.  
  6. trait Trait<T> {
  7. fn add(&mut self, _key: i32, _value: T) {}
  8. fn remove(&mut self, _key: i32) {}
  9. }
  10.  
  11. impl Trait<String> for Struct {}
  12. impl Trait<usize> for Struct {}
  13.  
  14. fn main () {
  15.  
  16. {
  17. let mut value = Struct(());
  18. value.add(123, String::new());
  19. Trait::<String>::remove(&mut value, 123);
  20. }
  21.  
  22. {
  23. let mut value = RwLock::new(Struct(()));
  24. let value_lock: RwLockWriteGuard<Struct> = value.write().unwrap();
  25. value_lock.add(123, String::new());
  26. // type annotations needed
  27. //value_lock.remove(123);
  28.  
  29. // the trait bound `std::sync::RwLockWriteGuard<'_, Struct>: Trait<std::string::String>` is not satisfied
  30. //Trait::<String>::remove(&mut value_lock, 123);
  31.  
  32. // non-primitive cast: `std::sync::RwLockWriteGuard<'_, Struct>` as `std::sync::RwLockWriteGuard<'_, dyn Trait<std::string::String>>`
  33. //(value_lock as RwLockWriteGuard::<dyn Trait::<String>>).remove(123);
  34. }
  35.  
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement