brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 854c36a 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 counted_iterator& operator-=(iter_difference_t<I> n)12//   requires random_access_iterator<I>;13 14#include <iterator>15 16#include "test_macros.h"17#include "test_iterators.h"18 19template<class Iter>20concept MinusEqEnabled = requires(Iter& iter) {21  iter -= 1;22};23 24constexpr bool test() {25  int buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8};26 27  {28    using Counted = std::counted_iterator<random_access_iterator<int*>>;29    Counted iter(random_access_iterator<int*>{buffer + 2}, 6);30    assert((iter -= 2) == Counted(random_access_iterator<int*>{buffer}, 8));31    assert((iter -= 0) == Counted(random_access_iterator<int*>{buffer}, 8));32    assert(iter.count() == 8);33 34    ASSERT_SAME_TYPE(decltype(iter -= 2), Counted&);35  }36  {37    using Counted = std::counted_iterator<contiguous_iterator<int*>>;38    Counted iter(contiguous_iterator<int*>{buffer + 2}, 6);39    assert((iter -= 2) == Counted(contiguous_iterator<int*>{buffer}, 8));40    assert((iter -= 0) == Counted(contiguous_iterator<int*>{buffer}, 8));41    assert(iter.count() == 8);42 43    ASSERT_SAME_TYPE(decltype(iter -= 2), Counted&);44  }45  {46    static_assert( MinusEqEnabled<      std::counted_iterator<random_access_iterator<int*>>>);47    static_assert(!MinusEqEnabled<const std::counted_iterator<random_access_iterator<int*>>>);48  }49 50 51  return true;52}53 54int main(int, char**) {55  test();56  static_assert(test());57 58  return 0;59}60