1*042dc3c4SHui Xie //===----------------------------------------------------------------------===// 2*042dc3c4SHui Xie // 3*042dc3c4SHui Xie // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*042dc3c4SHui Xie // See https://llvm.org/LICENSE.txt for license information. 5*042dc3c4SHui Xie // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*042dc3c4SHui Xie // 7*042dc3c4SHui Xie //===----------------------------------------------------------------------===// 8*042dc3c4SHui Xie 9*042dc3c4SHui Xie // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20 10*042dc3c4SHui Xie // UNSUPPORTED: libcpp-has-no-incomplete-ranges 11*042dc3c4SHui Xie 12*042dc3c4SHui Xie // template<class... Views> 13*042dc3c4SHui Xie // inline constexpr bool enable_borrowed_range<zip_view<Views...>> = 14*042dc3c4SHui Xie // (enable_borrowed_range<Views> && ...); 15*042dc3c4SHui Xie 16*042dc3c4SHui Xie #include <ranges> 17*042dc3c4SHui Xie #include <tuple> 18*042dc3c4SHui Xie 19*042dc3c4SHui Xie struct Borrowed : std::ranges::view_base { 20*042dc3c4SHui Xie int* begin() const; 21*042dc3c4SHui Xie int* end() const; 22*042dc3c4SHui Xie }; 23*042dc3c4SHui Xie 24*042dc3c4SHui Xie template <> 25*042dc3c4SHui Xie inline constexpr bool std::ranges::enable_borrowed_range<Borrowed> = true; 26*042dc3c4SHui Xie 27*042dc3c4SHui Xie static_assert(std::ranges::borrowed_range<Borrowed>); 28*042dc3c4SHui Xie 29*042dc3c4SHui Xie struct NonBorrowed : std::ranges::view_base { 30*042dc3c4SHui Xie int* begin() const; 31*042dc3c4SHui Xie int* end() const; 32*042dc3c4SHui Xie }; 33*042dc3c4SHui Xie static_assert(!std::ranges::borrowed_range<NonBorrowed>); 34*042dc3c4SHui Xie 35*042dc3c4SHui Xie // test borrowed_range 36*042dc3c4SHui Xie static_assert(std::ranges::borrowed_range<std::ranges::zip_view<Borrowed>>); 37*042dc3c4SHui Xie static_assert(std::ranges::borrowed_range<std::ranges::zip_view<Borrowed, Borrowed>>); 38*042dc3c4SHui Xie static_assert(!std::ranges::borrowed_range<std::ranges::zip_view<Borrowed, NonBorrowed>>); 39*042dc3c4SHui Xie static_assert(!std::ranges::borrowed_range<std::ranges::zip_view<NonBorrowed>>); 40*042dc3c4SHui Xie static_assert(!std::ranges::borrowed_range<std::ranges::zip_view<NonBorrowed, NonBorrowed>>); 41