brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 32ef9eb 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++17, c++2010 11// constexpr unreachable_sentinel_t end() const noexcept;12// constexpr iterator end() const requires (!same_as<Bound, unreachable_sentinel_t>);13 14#include <ranges>15#include <cassert>16#include <concepts>17#include <iterator>18 19constexpr bool test() {20  // bound21  {22    std::ranges::repeat_view<int, int> rv(0, 10);23    assert(rv.begin() + 10 == rv.end());24    std::same_as<std::ranges::iterator_t<decltype(rv)>> decltype(auto) iter = rv.end();25    static_assert(std::same_as<decltype(*iter), const int&>);26    for (const auto& i : rv) {27      assert(i == 0);28    }29  }30 31  // unbound32  {33    std::ranges::repeat_view<int> rv(0);34    assert(rv.begin() + 10 != rv.end());35    static_assert(std::same_as<decltype(rv.end()), std::unreachable_sentinel_t>);36    static_assert(noexcept(rv.end()));37    for (const auto& i : rv | std::views::take(10)) {38      assert(i == 0);39    }40  }41  return true;42}43 44int main(int, char**) {45  test();46  static_assert(test());47 48  return 0;49}50