brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · aa1edd2 Raw
60 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 outer-iterator::value-type outer-iterator::operator*() const;12 13#include <ranges>14 15#include <algorithm>16#include <cassert>17#include <string>18#include <string_view>19#include <type_traits>20#include "../types.h"21 22template <class View, class Separator>23constexpr void test_one(Separator sep) {24  using namespace std::string_literals;25  using namespace std::string_view_literals;26 27  View v("abc def ghi"sv, sep);28 29  // Non-const iterator.30  {31    auto i = v.begin();32    static_assert(!std::is_reference_v<decltype(*i)>);33    assert(std::ranges::equal(*i, "abc"s));34    assert(std::ranges::equal(*(++i), "def"s));35    assert(std::ranges::equal(*(++i), "ghi"s));36  }37 38  // Const iterator.39  {40    const auto ci = v.begin();41    static_assert(!std::is_reference_v<decltype(*ci)>);42    assert(std::ranges::equal(*ci, "abc"s));43  }44}45 46constexpr bool test() {47  // `View` is a forward range.48  test_one<SplitViewDiff>(" ");49  test_one<SplitViewInput>(' ');50 51  return true;52}53 54int main(int, char**) {55  test();56  static_assert(test());57 58  return 0;59}60