All values must be passed by ref because otherwise it will be leading for code bloat : we want eliminate by having only one function that accepts both rvalues and lvalues.