Guest User

Untitled

a guest
Jul 19th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.63 KB | None | 0 0
  1. //#![feature(nll)]
  2.  
  3. use std::marker::PhantomData;
  4. use std::mem::transmute;
  5. use std::os::raw::c_void;
  6.  
  7. struct Handler<'a> {
  8. _marker: PhantomData<std::cell::Cell<&'a ()>>,
  9. }
  10.  
  11. impl<'a> Handler<'a> {
  12. pub fn on_change<T>(&self, data: &'a T)
  13. where
  14. T: 'a,
  15. {
  16. unsafe {
  17. let user_data: *const c_void = transmute(data);
  18. println!("{:?}", user_data)
  19. }
  20. }
  21. }
  22.  
  23. fn main() {
  24. let foo = 1; // this line should be valid
  25. let handler = Handler {
  26. _marker: PhantomData,
  27. };
  28.  
  29. //let foo = 1; // this line should be illegal
  30. handler.on_change(&foo);
  31. handler.on_change(&foo);
  32. }
Add Comment
Please, Sign In to add comment