1df324bbaSzoecarver //===----------------------------------------------------------------------===// 2df324bbaSzoecarver // 3df324bbaSzoecarver // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4df324bbaSzoecarver // See https://llvm.org/LICENSE.txt for license information. 5df324bbaSzoecarver // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6df324bbaSzoecarver // 7df324bbaSzoecarver //===----------------------------------------------------------------------===// 8df324bbaSzoecarver 9df324bbaSzoecarver // UNSUPPORTED: c++03, c++11, c++14, c++17 10df324bbaSzoecarver // UNSUPPORTED: libcpp-has-no-incomplete-ranges 11df324bbaSzoecarver 12df324bbaSzoecarver // join_view() requires default_initializable<V> = default; 13df324bbaSzoecarver 14df324bbaSzoecarver #include <cassert> 15df324bbaSzoecarver #include <ranges> 16df324bbaSzoecarver 17df324bbaSzoecarver #include "types.h" 18df324bbaSzoecarver 19*3d3103b7SHui Xie struct DefaultView : std::ranges::view_base { 20*3d3103b7SHui Xie int i; // deliberately uninitialised 21*3d3103b7SHui Xie 22*3d3103b7SHui Xie ChildView* begin() const; 23*3d3103b7SHui Xie ChildView* end() const; 24*3d3103b7SHui Xie }; 25df324bbaSzoecarver test()26df324bbaSzoecarverconstexpr bool test() { 27*3d3103b7SHui Xie { 28df324bbaSzoecarver std::ranges::join_view<ParentView<ChildView>> jv; 29df324bbaSzoecarver assert(std::move(jv).base().ptr_ == globalChildren); 30*3d3103b7SHui Xie } 31*3d3103b7SHui Xie 32*3d3103b7SHui Xie // Default constructor should value initialise underlying view 33*3d3103b7SHui Xie { 34*3d3103b7SHui Xie std::ranges::join_view<DefaultView> jv; 35*3d3103b7SHui Xie assert(jv.base().i == 0); 36*3d3103b7SHui Xie } 37df324bbaSzoecarver 38df324bbaSzoecarver static_assert( std::default_initializable<std::ranges::join_view<ParentView<ChildView>>>); 39df324bbaSzoecarver static_assert(!std::default_initializable<std::ranges::join_view<CopyableParent>>); 40df324bbaSzoecarver 41df324bbaSzoecarver return true; 42df324bbaSzoecarver } 43df324bbaSzoecarver main(int,char **)44df324bbaSzoecarverint main(int, char**) { 45df324bbaSzoecarver test(); 46df324bbaSzoecarver static_assert(test()); 47df324bbaSzoecarver 48df324bbaSzoecarver return 0; 49df324bbaSzoecarver } 50