Yes - because you overload the operators to work with different types.
In the case of shift, however, it doesn't make sense to shift with non-
integer values. Restricting shift to work with an integer second
operand means that people can't make << and >> mean things other than
shift quite as easily.
I see his point though.
The + operator has been expanded to include not just arithmetic addition,
but concatenation (for example) of strings. There's not really any
mathematical equivalent to that which would justify the use of an addition
operator to represent that.
Likewise, if you describe the << and >> operators as "shift", well...that
word can mean a variety of things, and I can easily see it as meaning
something that is still easily understood as "shifting" but which allows a
non-integer magnitude for the shift. For example, scrolling or resizing a
bitmap.
The use of the shift operators in C++ for i/o always did bug me, and I'd
say that's a pretty clear departure from any intuitive idea of what a
"shift" would be. But that's not to say there aren't a wide variety of
other uses for a shift operator that *aren't* such a departure, and yet
could plausibly accept a non-integer operand.
The whole thing does seem a bit arbitrary to me.
Fortunately, operators are really just a luxury. Pretty much anything you
can do with an operator, you can just write a method to do instead, and
apply whatever types to the parameters you see fit. So it's not really a
big deal what the language designers decided with respect to arbitrarily
restricting the use of an operator. But it's still an arbitrary
restriction IMHO.
Pete