brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 7914af9 Raw
53 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 16struct PODSentinel {17  int i;18 19  friend constexpr bool operator==(int*, const PODSentinel& p) { return p.i == 0; }20};21 22struct Range : std::ranges::view_base {23  int* begin() const;24  PODSentinel end();25};26 27constexpr bool test() {28  using SplitView = std::ranges::split_view<Range, Range>;29  using SplitIter = std::ranges::iterator_t<SplitView>;30  using SplitSent = std::ranges::sentinel_t<SplitView>;31  static_assert(!std::is_same_v<SplitSent, SplitIter>);32 33  {34    SplitIter it;35    SplitSent s;36    assert(s == it); // to make sure that s.__end_.i is initialised to 0;37  }38 39  {40    SplitIter it;41    SplitSent s = {};42    assert(s == it); // to make sure that s.__end_.i is initialised to 0;43  }44  return true;45}46 47int main(int, char**) {48  test();49  static_assert(test());50 51  return 0;52}53