std::indirectly_movable
From cppreference.com
                    
                                        
                    
                    
                                                            
                    | Defined in header  <iterator> | ||
| template<class In, class Out> concept indirectly_movable = | (since C++20) | |
The indirectly_movable concept specifies the relationship between an indirectly_readable type and a type that is indirectly_writable. The indirectly_writable type must be able to directly move the object that the indirectly_readable type references.
See also
| (C++20) | specifies that values may be moved from an indirectly_readabletype to anindirectly_writabletype and that the move may be performed via an intermediate object(concept) | 
| (C++20) | specifies that values may be copied from an indirectly_readabletype to anindirectly_writabletype(concept) |