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)