brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · c9223c5 Raw
69 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// constexpr const Pred& pred() const;12 13#include <cassert>14#include <ranges>15#include <type_traits>16#include <utility>17 18struct View : std::ranges::view_interface<View> {19  int* begin() const;20  int* end() const;21};22 23struct Pred {24  int i;25  bool operator()(int) const;26};27 28constexpr bool test() {29  // &30  {31    std::ranges::take_while_view<View, Pred> twv{{}, Pred{5}};32    decltype(auto) x = twv.pred();33    static_assert(std::same_as<decltype(x), Pred const&>);34    assert(x.i == 5);35  }36 37  // const &38  {39    const std::ranges::take_while_view<View, Pred> twv{{}, Pred{5}};40    decltype(auto) x = twv.pred();41    static_assert(std::same_as<decltype(x), Pred const&>);42    assert(x.i == 5);43  }44 45  // &&46  {47    std::ranges::take_while_view<View, Pred> twv{{}, Pred{5}};48    decltype(auto) x = std::move(twv).pred();49    static_assert(std::same_as<decltype(x), Pred const&>);50    assert(x.i == 5);51  }52 53  // const &&54  {55    const std::ranges::take_while_view<View, Pred> twv{{}, Pred{5}};56    decltype(auto) x = std::move(twv).pred();57    static_assert(std::same_as<decltype(x), Pred const&>);58    assert(x.i == 5);59  }60 61  return true;62}63 64int main(int, char**) {65  test();66  static_assert(test());67  return 0;68}69