use update_wrapper from standard library