62 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++14, c++1710 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