FreeBSD Manual Pages
std::semiregular(3) C++ Standard Libary std::semiregular(3) NAME std::semiregular - std::semiregular Synopsis Defined in header <concepts> template <class T> concept semiregular = std::copyable<T> && (since C++20) std::default_initializable<T>; 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 ==. Example // Run this code #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; => assignment struct 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 fol- lowing 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::semiregular auto x) { std::cout << x.value << ' '; } 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 See also regular specifies that a type is regular, that is, it is both semi- regular and (C++20) equality_comparable (concept) http://cppreference.com 2022.07.31 std::semiregular(3)
NAME | Synopsis | Example | Output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::semiregular&sektion=3&manpath=FreeBSD+Ports+15.0>
