Namespaces
Variants

std::ranges::subrange<I,S,K>:: subrange

From cppreference.net
Ranges library
Range adaptors
subrange ( ) requires std:: default_initializable < I > = default ;
(1) (C++20 이후)
constexpr subrange ( /*convertible-to-non-slicing*/ < I > auto i, S s )
requires ( ! /*StoreSize*/ ) ;
(2) (C++20 이후)
constexpr subrange ( /*convertible-to-non-slicing*/ < I > auto i, S s,

/*make-unsigned-like-t*/ < std:: iter_difference_t < I >> n )

requires ( K == ranges :: subrange_kind :: sized ) ;
(3) (C++20 이후)
template < /*different-from*/ < subrange > R >

requires ranges:: borrowed_range < R > &&
/*convertible-to-non-slicing*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r )

requires ( ! /*StoreSize*/ || ranges:: sized_range < R > ) ;
(4) (C++20 이후)
template < ranges:: borrowed_range R >

requires /*convertible-to-non-slicing*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r,
/*make-unsigned-like-t*/ < std:: iter_difference_t < I >> n )
requires ( K == ranges :: subrange_kind :: sized )

: subrange { ranges:: begin ( r ) , ranges:: end ( r ) , n } { }
(5) (C++20 이후)

subrange 를 생성합니다.

/*make-unsigned-like-t*/ /*different-from*/ 의 정의는 각각 make-unsigned-like-t different-from 를 참조하십시오.

오버로드 데이터 멤버
begin_ end_ size_
( StoreSize true 인 경우에만)
(1) 값 초기화 값 초기화 0 으로 초기화
(2) std :: move ( i ) 로 초기화 s 로 초기화 해당 없음
(3) n 로 초기화
(4) std :: move ( ranges:: begin ( r ) ) 로 초기화 ranges:: end ( r ) 로 초기화 static_cast < decltype ( size_  ) >
( ranges:: size ( r ) )
로 초기화
(5) n 로 초기화
2) 만약 [ i , s ) 유효한 범위 가 아니라면, 동작은 정의되지 않습니다.
3) 다음 조건 중 하나라도 만족되면, 동작은 정의되지 않음:

매개변수

i - 범위의 시작을 나타내는 반복자
s - 범위의 끝을 나타내는 센티넬
r - 범위
n - 크기 힌트, 반드시 범위의 크기와 같아야 함

예제

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
P2393R1 C++20 오버로드 ( 4 ) 의 경우, size_ ranges:: size ( r ) 로 초기화될 수 있지만, 이는 항상 해당 unsigned-integer-like 타입으로
암시적으로 변환 가능하지는 않음
변환을
명시적으로 수행하도록 수정