std::ranges::dangling
From cppreference.com
                    
                                        
                    
                    
                                                            
                    | Defined in header  <ranges> | ||
| struct dangling; | (since C++20) | |
dangling is a placeholder type and an empty class type, used together with the template aliases ranges::borrowed_iterator_t and ranges::borrowed_subrange_t.
When some constrain algorithms that usually return an iterator or a subrange of a range take a particular rvalue range argument that does not models borrowed_range, dangling will be returned instead to avoid returning potentially dangling results.
Member functions
std::ranges::dangling::dangling
| constexpr dangling() noexcept = default; | (1) | |
| template<class... Args> constexpr dangling(Args&&...) noexcept { } | (2) | |
1) 
dangling is trivially default constructible.2) 
dangling can be constructed from arguments of arbitrary number and arbitrary non-void type. The construction does not have any side-effect itself.
In other words, after replacing the type (e.g. an iterator type) in a well-formed non-aggregate initialization with dangling, the resulting initialization is also well-formed.
Example
| This section is incomplete Reason: no example | 
See also
| obtains iterator type or subrangetype of a borrowed_range(alias template) |