1*481ad59bSzoecarver //===----------------------------------------------------------------------===// 2*481ad59bSzoecarver // 3*481ad59bSzoecarver // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*481ad59bSzoecarver // See https://llvm.org/LICENSE.txt for license information. 5*481ad59bSzoecarver // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*481ad59bSzoecarver // 7*481ad59bSzoecarver //===----------------------------------------------------------------------===// 8*481ad59bSzoecarver 9*481ad59bSzoecarver // UNSUPPORTED: c++03, c++11, c++14, c++17 10*481ad59bSzoecarver // UNSUPPORTED: libcpp-has-no-incomplete-ranges 11*481ad59bSzoecarver 12*481ad59bSzoecarver // single_view() requires default_initializable<T> = default; 13*481ad59bSzoecarver 14*481ad59bSzoecarver #include <ranges> 15*481ad59bSzoecarver #include <cassert> 16*481ad59bSzoecarver 17*481ad59bSzoecarver #include "test_macros.h" 18*481ad59bSzoecarver 19*481ad59bSzoecarver struct BigType { char buffer[64] = {10}; }; 20*481ad59bSzoecarver 21*481ad59bSzoecarver template<bool DefaultCtorEnabled> 22*481ad59bSzoecarver struct IsDefaultConstructible { 23*481ad59bSzoecarver IsDefaultConstructible() requires DefaultCtorEnabled = default; 24*481ad59bSzoecarver }; 25*481ad59bSzoecarver test()26*481ad59bSzoecarverconstexpr bool test() { 27*481ad59bSzoecarver static_assert( std::default_initializable<std::ranges::single_view<IsDefaultConstructible<true>>>); 28*481ad59bSzoecarver static_assert(!std::default_initializable<std::ranges::single_view<IsDefaultConstructible<false>>>); 29*481ad59bSzoecarver 30*481ad59bSzoecarver { 31*481ad59bSzoecarver std::ranges::single_view<BigType> sv; 32*481ad59bSzoecarver assert(sv.data()->buffer[0] == 10); 33*481ad59bSzoecarver assert(sv.size() == 1); 34*481ad59bSzoecarver } 35*481ad59bSzoecarver { 36*481ad59bSzoecarver const std::ranges::single_view<BigType> sv; 37*481ad59bSzoecarver assert(sv.data()->buffer[0] == 10); 38*481ad59bSzoecarver assert(sv.size() == 1); 39*481ad59bSzoecarver } 40*481ad59bSzoecarver 41*481ad59bSzoecarver return true; 42*481ad59bSzoecarver } 43*481ad59bSzoecarver main(int,char **)44*481ad59bSzoecarverint main(int, char**) { 45*481ad59bSzoecarver test(); 46*481ad59bSzoecarver static_assert(test()); 47*481ad59bSzoecarver 48*481ad59bSzoecarver return 0; 49*481ad59bSzoecarver } 50