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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // UNSUPPORTED: c++03, c++11, c++14, c++17 10 // UNSUPPORTED: libcpp-has-no-incomplete-ranges 11 12 // transform_view::<iterator>::operator{+,-} 13 14 #include <ranges> 15 16 #include "test_macros.h" 17 #include "../types.h" 18 test()19constexpr bool test() { 20 std::ranges::transform_view<MoveOnlyView, PlusOneMutable> transformView1; 21 auto iter1 = std::move(transformView1).begin(); 22 std::ranges::transform_view<MoveOnlyView, PlusOneMutable> transformView2; 23 [[maybe_unused]] auto iter2 = std::move(transformView2).begin(); 24 iter1 += 4; 25 assert((iter1 + 1).base() == globalBuff + 5); 26 assert((1 + iter1).base() == globalBuff + 5); 27 assert((iter1 - 1).base() == globalBuff + 3); 28 LIBCPP_ASSERT(iter1 - iter2 == 4); 29 assert((iter1 + 2) - 2 == iter1); 30 assert((iter1 - 2) + 2 == iter1); 31 32 return true; 33 } 34 main(int,char **)35int main(int, char**) { 36 test(); 37 static_assert(test()); 38 39 return 0; 40 } 41