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*481ad59bSzoecarver constexpr 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*481ad59bSzoecarver int main(int, char**) {
45*481ad59bSzoecarver   test();
46*481ad59bSzoecarver   static_assert(test());
47*481ad59bSzoecarver 
48*481ad59bSzoecarver   return 0;
49*481ad59bSzoecarver }
50