Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::os::raw::c_void;
- struct Counter {
- val: u32,
- }
- impl Counter {
- fn inc(&mut self, n: &mut N) {
- self.val += n.val;
- n.val += 1;
- }
- }
- struct N {
- val: u32,
- }
- struct X {
- n: N,
- ctr: Counter,
- }
- fn main() {
- let mut x = X{n: N{val:1}, ctr: Counter{val: 0}};
- {
- f(&mut x as *mut _ as *mut c_void);
- f(&mut x as *mut _ as *mut c_void);
- }
- println!("{}", x.ctr.val);
- }
- fn f(x_ptr: *mut c_void) {
- let x = unsafe { &mut *(x_ptr as *mut X) };
- x.ctr.inc(&mut x.n);
- }
Add Comment
Please, Sign In to add comment