brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · b2f4eae Raw
50 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// sentinel() = default;12 13#include <cassert>14#include <ranges>15#include <tuple>16 17struct PODSentinel {18  int i; // deliberately uninitialised19 20  friend constexpr bool operator==(std::tuple<int>*, const PODSentinel&) { return true; }21};22 23struct Range : std::ranges::view_base {24  std::tuple<int>* begin() const;25  PODSentinel end();26};27 28constexpr bool test() {29  using EleView  = std::ranges::elements_view<Range, 0>;30  using Sentinel = std::ranges::sentinel_t<EleView>;31  static_assert(!std::is_same_v<Sentinel, std::ranges::iterator_t<EleView>>);32 33  {34    Sentinel s;35    assert(s.base().i == 0);36  }37  {38    Sentinel s = {};39    assert(s.base().i == 0);40  }41  return true;42}43 44int main(int, char**) {45  test();46  static_assert(test());47 48  return 0;49}50