ject)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/iterator/ranges/dsc_iter_swap&action=edit)  
  
###  [ [ edit ](/mwiki/index.php?title=cpp/iterator&action=edit&section=12
"Edit section: Algorithm concepts and utilities \(since C++20\)") ]  Algorithm
concepts and utilities  (since C++20)

A set of concepts and related utility templates designed to ease constraining
common algorithm operations.

Defined in header ` [ <iterator> ](/w/cpp/header/iterator
"cpp/header/iterator") `  
---  
Defined in namespace ` std `  
  
#####  Indirect callable concepts  
  
[ indirectly_unary_invocable  indirectly_regular_unary_invocable  ](/w/cpp/iterator/indirectly_unary_invocable "cpp/iterator/indirectly unary invocable") (C++20)  (C++20)  |  specifies that a callable type can be invoked with the result of dereferencing an [ ` indirectly_readable ` ](/w/cpp/iterator/indirectly_readable "cpp/iterator/indirectly readable") type   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/iterator/dsc_indirectly_unary_invocable&action=edit)  
[ indirect_unary_predicate  ](/w/cpp/iterator/indirect_unary_predicate "cpp/iterator/indirect unary predicate") (C++20)  |  specifies that a callable type, when invoked with the result of dereferencing an [ ` indirectly_readable ` ](/w/cpp/iterator/indirectly_readable "cpp/iterator/indirectly readable") type, satisfies [ ` predicate ` ](/w/cpp/concepts/predicate "cpp/concepts/predicate")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/iterator/dsc_indirect_unary_predicate&action=edit)  
[ indirect_binary_predicate  ](/w/cpp/iterator/indirect_binary_predicate "cpp/iterator/indirect binary predicate") (C++20)  |  specifies that a callable type, when invoked with the result of dereferencing two [ ` indirectly_readable ` ](/w/cpp/iterator/indirectly_readable "cpp/iterator/indirectly readable") types, satisfies [ ` predicate ` ](/w/cpp/concepts/predicate "cpp/concepts/predicate")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/iterator/dsc_indirect_binary_predicate&action=edit)  
[ indirect_equivalence_relation  ](/w/cpp/iterator/indirect_equivalence_relation "cpp/iterator/indirect equivalence relation") (C++20)  |  specifies that a callable type, when invoked with the result of dereferencing two [ ` indirectly_readable ` ](/w/cpp/iterator/indirectly_readable "cpp/iterator/indirectly readable") types, satisfies [ ` equivalence_relation ` ](/w/cpp/concepts/equivalence_relation "cpp/concepts/equivalence relation")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/iterator/dsc_indirect_equivalence_relation&action=edit)  
[ indirect_strict_weak_order  ](/w/cpp/iterator/indirect_strict_weak_order "cpp/iterator/indirect strict weak order") (C++20)  |  specifies that a callable type, when invoked with the result of dereferencing two [ ` indirectly_readable ` ](/w/cpp/iterator/indirectly_readable "cpp/iterator/indirectly readable") types, satisfies [ ` strict_weak_order ` ](/w/cpp/concepts/strict_weak_order "cpp/concepts/strict weak order")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/iterator/dsc_indirect_strict_weak_order&action=edit)  
  
#####  Common algorithm requirements  
  
[ indirectly_movable  ](/w/cpp/iterator/indirectly_movable "cpp/iterator/indirectly movable") (C++20)  |  specifies that values may be moved from an [ ` indirectly_readable ` ](/w/cpp/iterator/indirectly_readable "cpp/iterator/indirectly readable") type to an [ ` indirectly_writable ` ](/w/cpp/iterator/indirectly_writable "cpp/iterator/indirectly writable") type   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/iterator/dsc_indirectly_movable&action=edit)  
[ indirectly_movable_storable  ](/w/cpp/iterator/indirectly_movable_storable "cpp/iterator/indirectly movable storable") (C++20)  |