1560170faSzoecarver //===----------------------------------------------------------------------===//
2560170faSzoecarver //
3560170faSzoecarver // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4560170faSzoecarver // See https://llvm.org/LICENSE.txt for license information.
5560170faSzoecarver // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6560170faSzoecarver //
7560170faSzoecarver //===----------------------------------------------------------------------===//
8560170faSzoecarver 
9560170faSzoecarver // UNSUPPORTED: c++03, c++11, c++14, c++17
1071909de3SMark de Wever // UNSUPPORTED: libcpp-has-no-incomplete-ranges
11560170faSzoecarver 
12560170faSzoecarver // constexpr auto size()
13560170faSzoecarver //   requires sized_range<V>
14560170faSzoecarver // constexpr auto size() const
15560170faSzoecarver //   requires sized_range<const V>
16560170faSzoecarver 
17560170faSzoecarver #include <ranges>
18560170faSzoecarver 
19560170faSzoecarver #include "test_macros.h"
20560170faSzoecarver #include "types.h"
21560170faSzoecarver 
22560170faSzoecarver template<class T>
23560170faSzoecarver concept SizeInvocable = requires(std::ranges::drop_view<T> t) { t.size(); };
24560170faSzoecarver 
test()25560170faSzoecarver constexpr bool test() {
26560170faSzoecarver   // sized_range<V>
27*610ac8dbSArthur O'Dwyer   std::ranges::drop_view dropView1(MoveOnlyView(), 4);
28560170faSzoecarver   assert(dropView1.size() == 4);
29560170faSzoecarver 
30560170faSzoecarver   // sized_range<V>
31*610ac8dbSArthur O'Dwyer   std::ranges::drop_view dropView2(MoveOnlyView(), 0);
32560170faSzoecarver   assert(dropView2.size() == 8);
33560170faSzoecarver 
34560170faSzoecarver   // sized_range<const V>
35*610ac8dbSArthur O'Dwyer   const std::ranges::drop_view dropView3(MoveOnlyView(), 8);
36560170faSzoecarver   assert(dropView3.size() == 0);
37560170faSzoecarver 
38560170faSzoecarver   // sized_range<const V>
39*610ac8dbSArthur O'Dwyer   const std::ranges::drop_view dropView4(MoveOnlyView(), 10);
40560170faSzoecarver   assert(dropView4.size() == 0);
41560170faSzoecarver 
42560170faSzoecarver   // Because ForwardView is not a sized_range.
43560170faSzoecarver   static_assert(!SizeInvocable<ForwardView>);
44560170faSzoecarver 
45560170faSzoecarver   return true;
46560170faSzoecarver }
47560170faSzoecarver 
main(int,char **)48560170faSzoecarver int main(int, char**) {
49560170faSzoecarver   test();
50560170faSzoecarver   static_assert(test());
51560170faSzoecarver 
52560170faSzoecarver   return 0;
53560170faSzoecarver }
54