Почему необходимо выполнить два приведения к изменяемому необработанному указателю подряд?

При взгляде наunix-socketЯ наткнулся на этот код:

let timeout = unsafe {
    let mut timeout: libc::timeval = mem::zeroed();
    let mut size = mem::size_of::<libc::timeval>() as libc::socklen_t;
    try!(cvt(libc::getsockopt(self.0,
                              libc::SOL_SOCKET,
                              kind,
                              &mut timeout as *mut _ as *mut _,
                              &mut size as *mut _ as *mut _)));
    timeout
};

Мне было интересно, в частности, эти строки:

&mut timeout as *mut _ as *mut _,
&mut size as *mut _ as *mut _

Почему необходимо выполнить два приведения к изменяемому необработанному указателю подряд? Почему этого было бы недостаточно, чтобы разыграть только один раз?

Ответы на вопрос(1)

Ваш ответ на вопрос