std.algorithm.sorting.topNCopy, for example, uses isInputRange!SRange when it merely iterates its elements. To iterate the elements, an opApply range is fine, but is unnecessarily forbidden.
Various other phobos functions use isInputRange when they only need the ability to iterate.
Need a "isForeachRange" template perhaps, to replace "isInputRange" when only foreach is needed? Or perhaps an assertion on the "ForeachType!T" should be used instead here?