Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::semiregular

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

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

      [edit]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; => 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:

      444

      [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 bothsemiregular andequality_comparable
      (concept)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/concepts/semiregular&oldid=177904"

      [8]ページ先頭

      ©2009-2025 Movatter.jp