std::semiregular
std::semiregular (세미레귤러 타입 개념)
T가 복사 가능하고 기본 생성 가능한 객체 타입인지를 명세하는 개념(concept)이에요. 즉 세미레귤러 타입은 "int처럼 행동하는" 타입의 최소 조건이에요. C++20부터 있어요.
출처: cppreference
본문
<concepts> 헤더에 정의돼 있어요.
template< class T >
concept semiregular = std::copyable<T> && std::default_initializable<T>;
개념 semiregular<T>는 T가 복사 가능하고(copyable, 즉 복사·이동·대입·swap 지원) 기본 생성 가능한(default_initializable) 객체 타입임을 명세해요.
세미레귤러 타입은 제네릭 프로그래밍에서 값처럼 다룰 수 있는 타입의 최소 조건이에요. 자원을 소유하지 않고 값 의미론을 가진 타입들이 대개 해당돼요.
copyable에 default_initializable을 더한 것이므로, 복사·이동·대입·swap뿐 아니라 인자 없이 기본 생성할 수도 있어야 해요. 이 개념을 기반으로 regular(여기에 동등 비교까지 더함)가 확장돼요.
컨테이너 원소 타입이나 값으로 저장되는 타입을 제약할 때 세미레귤러 조건이 자주 사용돼요.
참고 문헌
- C++23 표준 (ISO/IEC 14882:2024): 18.6 Object concepts [concepts.object]
- C++20 표준 (ISO/IEC 14882:2020): 18.6 Object concepts [concepts.object]