ranges_viewable_range
ranges_viewable_range (뷰 가능한 범위 개념)
ranges::viewable_range은 views::all을 통해 뷰로 변환될 수 있는 범위를 설명하는 range의 정제(개념)예요. C++20부터 사용할 수 있어요.
출처: cppreference
본문
<ranges> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template< class T >
concept viewable_range =
ranges::range<T> &&
((ranges::view<std::remove_cvref_t<T>> &&
std::constructible_from<std::remove_cvref_t<T>, T>) ||
(!ranges::view<std::remove_cvref_t<T>> &&
(std::is_lvalue_reference_v<T> ||
(std::movable<std::remove_reference_t<T>> && !/*is-initializer-list*/<T>))));
(since C++20)
viewable_range 개념은 views::all을 통해 뷰로 변환될 수 있는 범위를 설명하는 range의 정제예요.
상수 /*is-initializer-list*/<T>는 std::remove_cvref_t<T>가 std::initializer_list의 특수화일 때만 true예요.
예제 (Example)
이 코드를 실행해 봐요.
#include <ranges>
#include <string>
#include <vector>
struct valid_result {};
struct invalid_result {};
template <typename T>
concept valid_viewable_range = std::same_as<T, valid_result>;
// 기본적으로 문자열·벡터 같은 lvalue 범위는 viewable_range
static_assert(std::ranges::viewable_range<std::vector<int>&>);
int main() {}