A borrowed range is one whose iterator validity doesn't rely on the lifetime of the parent object. Passing a non-borrowed range to an algorithm as an rvalue means that it will return a ranges::dangling rather than an iterator. A borrowed range can be wrapped in a view object using views::all()