1*94461822SHui Xie //===----------------------------------------------------------------------===// 2*94461822SHui Xie // 3*94461822SHui Xie // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*94461822SHui Xie // See https://llvm.org/LICENSE.txt for license information. 5*94461822SHui Xie // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*94461822SHui Xie // 7*94461822SHui Xie //===----------------------------------------------------------------------===// 8*94461822SHui Xie 9*94461822SHui Xie // UNSUPPORTED: c++03, c++11, c++14, c++17 10*94461822SHui Xie 11*94461822SHui Xie // elements_view() requires default_initializable<V> = default; 12*94461822SHui Xie 13*94461822SHui Xie #include <cassert> 14*94461822SHui Xie #include <ranges> 15*94461822SHui Xie #include <tuple> 16*94461822SHui Xie #include <type_traits> 17*94461822SHui Xie 18*94461822SHui Xie template <bool DefaultInitializable> 19*94461822SHui Xie struct View : std::ranges::view_base { 20*94461822SHui Xie int i = 42; 21*94461822SHui Xie constexpr explicit View() 22*94461822SHui Xie requires DefaultInitializable 23*94461822SHui Xie = default; 24*94461822SHui Xie std::tuple<int>* begin() const; 25*94461822SHui Xie std::tuple<int>* end() const; 26*94461822SHui Xie }; 27*94461822SHui Xie 28*94461822SHui Xie 29*94461822SHui Xie // clang-format off 30*94461822SHui Xie static_assert( std::is_default_constructible_v<std::ranges::elements_view<View<true >, 0>>); 31*94461822SHui Xie static_assert(!std::is_default_constructible_v<std::ranges::elements_view<View<false>, 0>>); 32*94461822SHui Xie // clang-format on 33*94461822SHui Xie test()34*94461822SHui Xieconstexpr bool test() { 35*94461822SHui Xie { 36*94461822SHui Xie std::ranges::elements_view<View<true>, 0> ev = {}; 37*94461822SHui Xie assert(ev.base().i == 42); 38*94461822SHui Xie } 39*94461822SHui Xie 40*94461822SHui Xie return true; 41*94461822SHui Xie } 42*94461822SHui Xie main(int,char **)43*94461822SHui Xieint main(int, char**) { 44*94461822SHui Xie test(); 45*94461822SHui Xie static_assert(test()); 46*94461822SHui Xie return 0; 47*94461822SHui Xie } 48