Namespaces
Variants

std:: regular

From cppreference.net
ヘッダーで定義 <concepts>
template < class T >
concept regular = std:: semiregular < T > && std:: equality_comparable < T > ;
(C++20以降)

regular コンセプトは、型が regular であること、つまりコピー可能、デフォルト構築可能、等値比較可能であることを指定します。これは int のような組み込み型と同様に振る舞い、 == で比較可能な型によって満たされます。

#include <concepts>
#include <iostream>
template<std::regular T>
struct Single
{
    T value;
    friend bool operator==(const Single&, const Single&) = default;
};
int main()
{
    Single<int> myInt1{4};
    Single<int> myInt2;
    myInt2 = myInt1;
    if (myInt1 == myInt2)
        std::cout << "Equal\n";
    std::cout << myInt1.value << ' ' << myInt2.value << '\n';
}

出力:

Equal
4 4

参考文献

  • C++23標準 (ISO/IEC 14882:2024):
  • 18.6 オブジェクトコンセプト [concepts.object]
  • C++20規格 (ISO/IEC 14882:2020):
  • 18.6 オブジェクトコンセプト [concepts.object]

関連項目

型のオブジェクトがコピー、ムーブ、交換、およびデフォルト構築可能であることを指定する
(concept)