1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// UNSUPPORTED: c++03, c++11, c++14, c++17
10
11// template<class T>
12// concept borrowed_range;
13
14#include <ranges>
15
16struct NotRange {
17 int begin() const;
18 int end() const;
19};
20
21struct Range {
22 int *begin();
23 int *end();
24};
25
26struct ConstRange {
27 int *begin() const;
28 int *end() const;
29};
30
31struct BorrowedRange {
32 int *begin() const;
33 int *end() const;
34};
35
36template<>
37inline constexpr bool std::ranges::enable_borrowed_range<BorrowedRange> = true;
38
39static_assert(!std::ranges::borrowed_range<NotRange>);
40static_assert(!std::ranges::borrowed_range<NotRange&>);
41static_assert(!std::ranges::borrowed_range<const NotRange>);
42static_assert(!std::ranges::borrowed_range<const NotRange&>);
43static_assert(!std::ranges::borrowed_range<NotRange&&>);
44
45static_assert(!std::ranges::borrowed_range<Range>);
46static_assert( std::ranges::borrowed_range<Range&>);
47static_assert(!std::ranges::borrowed_range<const Range>);
48static_assert(!std::ranges::borrowed_range<const Range&>);
49static_assert(!std::ranges::borrowed_range<Range&&>);
50
51static_assert(!std::ranges::borrowed_range<ConstRange>);
52static_assert( std::ranges::borrowed_range<ConstRange&>);
53static_assert(!std::ranges::borrowed_range<const ConstRange>);
54static_assert( std::ranges::borrowed_range<const ConstRange&>);
55static_assert(!std::ranges::borrowed_range<ConstRange&&>);
56
57static_assert( std::ranges::borrowed_range<BorrowedRange>);
58static_assert( std::ranges::borrowed_range<BorrowedRange&>);
59static_assert( std::ranges::borrowed_range<const BorrowedRange>);
60static_assert( std::ranges::borrowed_range<const BorrowedRange&>);
61static_assert( std::ranges::borrowed_range<BorrowedRange&&>);
62

source code of libcxx/test/std/ranges/range.req/range.range/borrowed_range.compile.pass.cpp