std::indirectly_swappable

From cppreference.com
< cpp‎ | iterator
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
indirectly_swappable
(C++20)
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11)(C++14)
(C++14)(C++14)
(C++11)(C++14)
(C++14)(C++14)
(C++17)(C++20)
(C++17)
(C++17)
Defined in header <iterator>
template < class I1, class I2 = I1 >

concept indirectly_swappable =
std::indirectly_readable <I1> &&
std::indirectly_readable <I2> &&
    requires( const I1 i1, const I2 i2 )
{
ranges::iter_swap (i1, i1) ;
ranges::iter_swap (i1, i2) ;
ranges::iter_swap (i2, i1) ;
ranges::iter_swap (i2, i2) ;

} ;
(since C++20)

The concept indirectly_swappable specifies a relationship between two types respectively modelling std::indirectly_readable

Semantic requirements

I1 and I2 model indirectly_swappable only if all concepts it subsumes are modeled.

Equality preservation

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving

See also

specifies that a type is indirectly readable by applying operator *
(concept)
(C++20)
swaps the values referenced by two dereferenceable objects
(customization point object)