Namespaces
Variants

std:: regular

From ru.cppreference.net
Определено в заголовочном файле <concepts>
template < class T >
concept regular = std:: semiregular < T > && std:: equality_comparable < T > ;
(начиная с C++20)

Концепт 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]

Смотрите также

определяет, что объект типа может быть скопирован, перемещён, обменян и создан по умолчанию
(концепт)