#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;});}