: 
vector<int> f();
auto result1 = ranges::find(f(), 42);                                   
static_assert(same_as<decltype(result1), ranges::dangling>);
auto vec = f();
auto result2 = ranges::find(vec, 42);                                   
static_assert(same_as<decltype(result2), vector<int>::iterator>);
auto result3 = ranges::find(subrange{vec}, 42);                         
static_assert(same_as<decltype(result3), vector<int>::iterator>);
 
The call to 
ranges::find at #1 returns 
ranges::dangling
since 
f() is an rvalue 
vector;
the 
vector could potentially be destroyed
before a returned iterator is dereferenced
.  However, the calls at #2 and #3 both return iterators
since the lvalue 
vec and specializations of 
subrange
model 
borrowed_range. — 
end example