pub fn with_string_cache<F: FnOnce() -> T, T>(func: F) -> T