The return type isn't the same as the input type there. It only looks that way because of C's limitations.
Put it this way: f(f(x)) never makes sense for those definitions of f; it would always indicate a programming error. And so the type system ought to prevent it.
If you want to clamp a value to some arbitrary range (a hint to the name), then any function that does so has this property.