/copy_constructible "cpp/concepts/copy constructible") (C++20)  |  specifies that an object of a type can be copy constructed and move constructed   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_copy_constructible&action=edit)  
  
#####  Comparison concepts  
  
Defined in header ` [ <concepts> ](/w/cpp/header/concepts
"cpp/header/concepts") `  
[ _ boolean-testable  _ ](/w/cpp/concepts/boolean-testable "cpp/concepts/boolean-testable") (C++20)  |  specifies that a type can be used in Boolean contexts   
(  exposition-only concept*  )  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_boolean-
testable&action=edit)  
[ equality_comparable  equality_comparable_with  ](/w/cpp/concepts/equality_comparable "cpp/concepts/equality comparable") (C++20)  |  specifies that operator  ==  is an equivalence relation   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_equality_comparable&action=edit)  
[ totally_ordered  totally_ordered_with  ](/w/cpp/concepts/totally_ordered "cpp/concepts/totally ordered") (C++20)  |  specifies that the comparison operators on the type yield a total order   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_totally_ordered&action=edit)  
Defined in header ` [ <compare> ](/w/cpp/header/compare "cpp/header/compare")
`  
[ three_way_comparable  three_way_comparable_with  ](/w/cpp/utility/compare/three_way_comparable "cpp/utility/compare/three way comparable") (C++20)  |  specifies that operator  <=> produces consistent result on given types   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/utility/compare/dsc_three_way_comparable&action=edit)  
  
#####  Object concepts  
  
Defined in header ` [ <concepts> ](/w/cpp/header/concepts
"cpp/header/concepts") `  
[ movable  ](/w/cpp/concepts/movable "cpp/concepts/movable") (C++20)  |  specifies that an object of a type can be moved and swapped   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_movable&action=edit)  
[ copyable  ](/w/cpp/concepts/copyable "cpp/concepts/copyable") (C++20)  |  specifies that an object of a type can be copied, moved, and swapped   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_copyable&action=edit)  
[ semiregular  ](/w/cpp/concepts/semiregular "cpp/concepts/semiregular") (C++20)  |  specifies that an object of a type can be copied, moved, swapped, and default constructed   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_semiregular&action=edit)  
[ regular  ](/w/cpp/concepts/regular "cpp/concepts/regular") (C++20)  |  specifies that a type is regular, that is, it is both [ ` semiregular ` ](/w/cpp/concepts/semiregular "cpp/concepts/semiregular") and [ ` equality_comparable ` ](/w/cpp/concepts/equality_comparable "cpp/concepts/equality comparable")   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_regular&action=edit)  
  
#####  Callable concepts  
  
Defined in header ` [ <concepts> ](/w/cpp/header/concepts
"cpp/header/concepts") `  
[ invocable  regular_invocable  ](/w/cpp/concepts/invocable "cpp/concepts/invocable") (C++20)  |  specifies that a callable type can be invoked with a given set of argument types   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_invocable&action=edit)  
[ predicate  ](/w/cpp/concepts/predicate "cpp/concepts/predicate") (C++20)  |  specifies that a callable type is a Boolean predicate   
(concept)  [ [edit]
](https://en.cppreference.com/mwiki/index.php?title=Template:cpp/concepts/dsc_predicate&action=edit)  
[ relation  ](/w/cpp/concepts/relation "cpp/concepts/relation") (C++20)  |  specifies that a callable type is a binary relatio