1e5d8b93eSzoecarver //===----------------------------------------------------------------------===//
2e5d8b93eSzoecarver //
3e5d8b93eSzoecarver // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e5d8b93eSzoecarver // See https://llvm.org/LICENSE.txt for license information.
5e5d8b93eSzoecarver // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e5d8b93eSzoecarver //
7e5d8b93eSzoecarver //===----------------------------------------------------------------------===//
8e5d8b93eSzoecarver 
9e5d8b93eSzoecarver // UNSUPPORTED: c++03, c++11, c++14, c++17
1071909de3SMark de Wever // UNSUPPORTED: libcpp-has-no-incomplete-ranges
11e5d8b93eSzoecarver 
12e5d8b93eSzoecarver // template<class T>
13e5d8b93eSzoecarver //   inline constexpr bool enable_borrowed_range<common_view<T>> = enable_borrowed_range<T>;
14e5d8b93eSzoecarver 
15e5d8b93eSzoecarver #include <ranges>
16e5d8b93eSzoecarver 
17*9021f368SArthur O'Dwyer // common_view can only wrap Ts that are `view<T> && !common_range<T>`, so we need to invent one.
18*9021f368SArthur O'Dwyer struct Uncommon : std::ranges::view_base {
193666dd79SArthur O'Dwyer     int *begin() const;
20*9021f368SArthur O'Dwyer     std::unreachable_sentinel_t end() const;
21e5d8b93eSzoecarver };
22e5d8b93eSzoecarver 
23*9021f368SArthur O'Dwyer static_assert(!std::ranges::borrowed_range<std::ranges::common_view<Uncommon>>);
24*9021f368SArthur O'Dwyer static_assert(!std::ranges::borrowed_range<std::ranges::common_view<std::ranges::owning_view<Uncommon>>>);
25*9021f368SArthur O'Dwyer static_assert( std::ranges::borrowed_range<std::ranges::common_view<std::ranges::ref_view<Uncommon>>>);
26