brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · d99e57f Raw
70 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 iterator& operator++();12// constexpr void operator++(int);13// constexpr iterator operator++(int) requires incrementable<W>;14 15#include <cassert>16#include <ranges>17#include <type_traits>18 19#include "test_macros.h"20#include "../types.h"21 22constexpr bool test() {23  {24    std::ranges::iota_view<int> io(0);25    auto iter1 = io.begin();26    auto iter2 = io.begin();27    assert(iter1 == iter2);28    assert(++iter1 != iter2++);29    assert(iter1 == iter2);30 31    static_assert(!std::is_reference_v<decltype(iter2++)>);32    static_assert( std::is_reference_v<decltype(++iter2)>);33    static_assert(std::same_as<std::remove_reference_t<decltype(++iter2)>, decltype(iter2++)>);34  }35  {36    std::ranges::iota_view io(SomeInt(0));37    auto iter1 = io.begin();38    auto iter2 = io.begin();39    assert(iter1 == iter2);40    assert(++iter1 != iter2++);41    assert(iter1 == iter2);42 43    static_assert(!std::is_reference_v<decltype(iter2++)>);44    static_assert( std::is_reference_v<decltype(++iter2)>);45    static_assert(std::same_as<std::remove_reference_t<decltype(++iter2)>, decltype(iter2++)>);46  }47 48  {49    std::ranges::iota_view<NotIncrementable> io(NotIncrementable(0));50    auto iter1 = io.begin();51    auto iter2 = io.begin();52    assert(iter1 == iter2);53    assert(++iter1 != iter2);54    iter2++;55    assert(iter1 == iter2);56 57    static_assert(std::same_as<decltype(iter2++), void>);58    static_assert(std::is_reference_v<decltype(++iter2)>);59  }60 61  return true;62}63 64int main(int, char**) {65  test();66  static_assert(test());67 68  return 0;69}70