Namespaces
Variants
Actions

std::semiregular

From cppreference.com
< cpp‎ | concepts
Defined in header <concepts>
template<class T >
concept semiregular =std::copyable<T>&&std::default_initializable<T>;
(since C++20)

The semiregular concept specifies that a type is both copyable and default constructible. It is satisfied by types that behave similarly to built-in types like int, except that they need not support comparison with ==.

[edit]Example

#include <concepts>#include <iostream>   template<std::semiregular T>// Credit Alexander Stepanov// concepts are requirements on T// Requirement on T: T is semiregular// T a(b); or T a = b; => copy constructor// T a; => default constructor// a = b; => assignmentstruct Single { T value;// Aggregation initialization for Single behaves like following constructor:// explicit Single(const T& x) : value(x) {}   // Implicitly declared special member functions behave like following definitions,// except that they may have additional properties:// Single(const Single& x) : value(x.value) {}// Single() {}// ~Single() {}// Single& operator=(const Single& x) { value = x.value; return *this; }// comparison operator is not defined; it is not required by `semiregular` concept// bool operator==(Single const& other) const = delete;};   void print(std::semiregularauto x){std::cout<< x.value<<'\n';}   int main(){ Single<int> myInt1{4};// aggregate initialization: myInt1.value = 4 Single<int> myInt2(myInt1);// copy constructor Single<int> myInt3;// default constructor myInt3 = myInt2;// copy assignment operator// myInt1 == myInt2; // Error: operator== is not defined   print(myInt1);// ok: Single<int> is a `semiregular` type print(myInt2); print(myInt3);   }// Single<int> variables are destroyed here

Output:

4 4 4

[edit]References

  • C++23 standard (ISO/IEC 14882:2024):
  • 18.6 Object concepts [concepts.object]
  • C++20 standard (ISO/IEC 14882:2020):
  • 18.6 Object concepts [concepts.object]

[edit]See also

(C++20)
specifies that a type is regular, that is, it is both semiregular and equality_comparable
(concept)[edit]
close