I believe Concepts lite in C++ works around this by allowing a
syntax like this:
void foo(InputRange{T} range1, InputRange{T2} range2)
vs.
void foo(InputRange range1, InputRange range2)
If they are the same type.
I believe the objection is that the proposed syntax can't tell
the
difference between:
void foo(R)(R range1, R range2) if (isInputRange!R)
and
void foo(R,S)(R range1, S range2) if (isInputRange!R &&
isInputRange!S)
I.e. in the first case, the two ranges must be the same type,
whereas in
the second case they can be different types as long as they are
both
input ranges.
T