//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 // friend constexpr bool operator==(const iterator& x, const iterator& y); // requires ref-is-glvalue && forward_range && // equality_comparable>>; #include #include #include "../types.h" constexpr bool test() { int buffer[4][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; { std::ranges::join_view jv(buffer); auto iter1 = jv.begin(); auto iter2 = jv.begin(); assert(iter1 == iter2); iter1++; assert(iter1 != iter2); iter2++; assert(iter1 == iter2); assert(jv.begin() == std::as_const(jv).begin()); } { // !ref-is-glvalue BidiCommonInner inners[2] = {buffer[0], buffer[1]}; InnerRValue> outer{inners}; std::ranges::join_view jv(outer); auto iter = jv.begin(); static_assert(!std::equality_comparable); } { // !forward_range using Inner = BufferView; using Outer = BufferView, sentinel_wrapper>>; static_assert(!std::equality_comparable>); Inner inners[2] = {buffer[0], buffer[1]}; std::ranges::join_view jv(Outer{inners}); auto iter = jv.begin(); static_assert(!std::equality_comparable); } { // !equality_comparable>>; using Inner = BufferView, sentinel_wrapper>>; Inner inners[1] = {buffer[0]}; std::ranges::join_view jv{inners}; auto iter = jv.begin(); static_assert(!std::equality_comparable); auto const_iter = std::as_const(jv).begin(); static_assert(!std::equality_comparable); } return true; } int main(int, char**) { test(); static_assert(test()); return 0; }