Hello The ref and non-ref versions are distinct because they handle parameters differently. Expanding all combinations of ref parameters automatically when instantiating S would indeed simplify usage but requires templates to handle these variations efficiently.