clamp should actually accept anything comparable. E.g. clamp("foo", "bar", "baz") should return "baz".
Why wouldn't it return "foo" instead?