ranges_viewable_range

ranges_viewable_range (뷰 가능한 범위 개념)

ranges::viewable_rangeviews::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() {}

더 알아보기 (Learn more)

cppreference