ranges_sized_range
ranges_sized_range (크기 있는 범위 개념)
ranges::sized_range은 size 함수로 상수 시간에 크기를 아는 range 타입의 요구사항을 지정하는 개념이에요. C++20부터 사용할 수 있어요.
출처: cppreference
본문
<ranges> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template< class T >
concept sized_range = ranges::range<T> &&
requires(T& t) {
ranges::size(t);
};
(1) (since C++20) (until C++26)
template< class T >
concept sized_range = ranges::approximately_sized_range<T> &&
requires(T& t) {
ranges::size(t);
};
(since C++26)
template< class >
constexpr bool disable_sized_range = false;
(2) (since C++20)
-
- sized_range 개념은 size 함수로 상수 시간에 크기를 아는 range(until C++26) approximately_sized_range(since C++26) 타입의 요구사항을 지정해요.
-
- disable_sized_range는 size 함수(멤버 또는 비멤버)를 제공하지만 실제로는 sized_range를 모델링하지 않는 range 타입을 허용하기 위해 존재해요. 사용자는 cv 한정되지 않은 프로그램 정의 타입에 대해 disable_sized_range를 특수화할 수 있어요. 그런 특수화는 상수 표현식이어야 하고 프로그램에 나타나는 모든 (cv 한정 포함) 특수화에 대해 [true, false] 일관된 값이어야 해요.
의미 요구사항 (Semantic requirements)
- sized_range<T>는 T를 모델링하는 타입 t에 대해 ranges::size(t)가 t의 요소 수와 같은 분할 상환 상수 시간일 때만 모델링돼요.
- lvalue t에 대해 ranges::size(t)가 유효하면 ranges::size(t)는 ranges::detail::size(t)와 동등할 수 있어요.