std::regular
std::regular (정규 타입 개념)
T가 세미레귤러(semiregular)이면서 동등 비교 가능한(equality_comparable) 정규 타입인지를 명세하는 개념(concept)이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class T >
concept regular = std::semiregular<T> && std::equality_comparable<T>;
개념 regular<T>는 T가 정규 타입임을 명세해요. 정규 타입은 기본 생성, 복사/이동, 대입, swap이 가능한 세미레귤러 타입에 더해 동등 비교(==, !=)까지 지원하는 타입이에요.
알렉산더 스테파노프의 일반화 프로그래밍에서 "정규 타입"은 값처럼 행동하는 타입을 뜻해요. 정수, 부동소수점, std::string, std::vector 같은 값 타입들이 대표적이에요.
정규 타입 제약을 쓰면 std::set, std::unordered_map 같은 컨테이너의 키 타입이나, 복사·비교가 모두 필요한 제네릭 알고리즘의 타입 인자를 제한할 수 있어요. semiregular과 달리 값의 동등성을 검사할 수 있어야 함을 강조해요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.6 Object concepts [concepts.object]
- C++20 표준 (ISO/IEC 14882:2020): 18.6 Object concepts [concepts.object]