See lines: - Input!IR temp = input; - input = temp; bool commentLine() { Input!IR temp = input;(...) if (!temp.empty) { (...) input = temp; return true; } else return false; }
`temp = input.save` is exactly what you want here, which means forward range is required. Your example won't work for range objects with reference semantics.