68 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 R>12// reverse_view(R&&) -> reverse_view<views::all_t<R>>;13 14#include <ranges>15 16#include <concepts>17#include <utility>18 19#include "test_iterators.h"20 21struct View : std::ranges::view_base {22 int *begin() const;23 int *end() const;24};25 26struct Range {27 int *begin() const;28 int *end() const;29};30 31struct BorrowedRange {32 int *begin() const;33 int *end() const;34};35template<>36inline constexpr bool std::ranges::enable_borrowed_range<BorrowedRange> = true;37 38void testCTAD() {39 View v;40 Range r;41 BorrowedRange br;42 43 static_assert(std::same_as<44 decltype(std::ranges::reverse_view(v)),45 std::ranges::reverse_view<View>46 >);47 static_assert(std::same_as<48 decltype(std::ranges::reverse_view(std::move(v))),49 std::ranges::reverse_view<View>50 >);51 static_assert(std::same_as<52 decltype(std::ranges::reverse_view(r)),53 std::ranges::reverse_view<std::ranges::ref_view<Range>>54 >);55 static_assert(std::same_as<56 decltype(std::ranges::reverse_view(std::move(r))),57 std::ranges::reverse_view<std::ranges::owning_view<Range>>58 >);59 static_assert(std::same_as<60 decltype(std::ranges::reverse_view(br)),61 std::ranges::reverse_view<std::ranges::ref_view<BorrowedRange>>62 >);63 static_assert(std::same_as<64 decltype(std::ranges::reverse_view(std::move(br))),65 std::ranges::reverse_view<std::ranges::owning_view<BorrowedRange>>66 >);67}68