let with_temp_dir func =
  let dir = create_temp_dir () in
  let finally () = remove_directory ~recursive: true dir
  in
    try let r = func dir in (finally (); r) with | e -> (finally (); raise e)