Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::viewable_range

      From cppreference.com
      <cpp‎ |ranges
       
       
      Ranges library
      Range adaptors
       
      Defined in header<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)

      Theviewable_range concept is a refinement ofrange that describes a range that can be converted into aview throughviews::all.

      The constant/*is-initializer-list*/<T> istrue if and only ifstd::remove_cvref_t<T> is a specialization ofstd::initializer_list.

      [edit]Example

      Run this code
      #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>; template<typename T>concept invalid_viewable_range=std::same_as<T, invalid_result>; auto test_viewable_range(std::ranges::viewable_rangeauto&&)-> valid_result;auto test_viewable_range(auto&&)-> invalid_result; int main(){auto il={1,2,3};int arr[]{1,2,3};std::vector vec{1,2,3};    std::ranges::ref_view r{arr};    std::ranges::owning_view o{std::string("Hello")};     static_assert(requires{{ test_viewable_range(il)}-> valid_viewable_range;{ test_viewable_range(std::move(il))}-> invalid_viewable_range;{ test_viewable_range(arr)}-> valid_viewable_range;{ test_viewable_range(std::move(arr))}-> invalid_viewable_range;{ test_viewable_range(vec)}-> valid_viewable_range;{ test_viewable_range(std::move(vec))}-> valid_viewable_range;{ test_viewable_range(r)}-> valid_viewable_range;{ test_viewable_range(std::move(r))}-> valid_viewable_range;{ test_viewable_range(o)}-> invalid_viewable_range;{ test_viewable_range(std::move(o))}-> valid_viewable_range;{ test_viewable_range(std::ranges::ref_view(o))}-> valid_viewable_range;});}

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3481C++20viewable_range accepted an lvalue of a move-only viewrejects
      P2415R2C++20viewable_range only accepted non-view rvalues that areborrowed_rangeaccepts more types

      [edit]See also

      aview that includes all elements of arange
      (alias template)(range adaptor object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/viewable_range&oldid=171265"

      [8]ページ先頭

      ©2009-2025 Movatter.jp