pub fn drain_filter<T, F: FnMut(&mut T) -> bool>(
    vec: &mut Vec<T>,
    pred: F
) -> Vec<T>