This is similar to #20 but narrower in scope. The HashMap or LruCache that stores memoized results only requires an owned key when a new value is inserted. Could the memoized function accept a borrowed key which implements Clone or maybe ToOwned? Then if the function signature is fn my_function(key: &String) -> Value the cache could call key.clone() or key.to_owned() only in the case of a cache insert.