brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · dc967b6 Raw
73 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 decltype(auto) inner-iterator::operator*() const;12 13#include <ranges>14 15#include "../types.h"16 17constexpr bool test() {18  // Can call `inner-iterator::operator*`; `View` is a forward range.19  {20    SplitViewDiff v("abc def", " ");21    auto val = *v.begin();22 23    // Non-const iterator.24    {25      auto i = val.begin();26      static_assert(std::same_as<decltype(*i), char&>);27      assert(*i == 'a');28      assert(*(++i) == 'b');29      assert(*(++i) == 'c');30    }31 32    // Const iterator.33    {34      const auto ci = val.begin();35      static_assert(std::same_as<decltype(*ci), char&>);36      assert(*ci == 'a');37    }38  }39 40  // Can call `inner-iterator::operator*`; `View` is an input range.41  {42    SplitViewInput v("abc def", ' ');43    auto val = *v.begin();44 45    // Non-const iterator.46    {47      auto i = val.begin();48      static_assert(std::same_as<decltype(*i), char&>);49      assert(*i == 'a');50      assert(*(++i) == 'b');51      assert(*(++i) == 'c');52    }53 54    // Const iterator.55    {56      const auto ci = val.begin();57      static_assert(std::same_as<decltype(*ci), char&>);58      // Note: when the underlying range is an input range, `current` is stored in the `lazy_split_view` itself and59      // shared between `inner-iterator`s. Consequently, incrementing one iterator effectively increments all of them.60      assert(*ci == 'c');61    }62  }63 64  return true;65}66 67int main(int, char**) {68  test();69  static_assert(test());70 71  return 0;72}73