xref: /llvm-project/libcxx/test/std/ranges/range.adaptors/range.transform/base.pass.cpp (revision d2baefae6846765eef6a6dd69d4fdf1082ce29ad)
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 // UNSUPPORTED: c++03, c++11, c++14, c++17
10 // UNSUPPORTED: libcpp-has-no-incomplete-ranges
11 
12 // constexpr V base() const& requires copy_constructible<V>
13 // constexpr V base() &&
14 
15 #include <ranges>
16 
17 #include "test_macros.h"
18 #include "types.h"
19 
20 constexpr bool test() {
21   {
22     std::ranges::transform_view<MoveOnlyView, PlusOne> transformView;
23     MoveOnlyView base = std::move(transformView).base();
24     ASSERT_SAME_TYPE(MoveOnlyView, decltype(std::move(transformView).base()));
25     assert(std::ranges::begin(base) == globalBuff);
26   }
27 
28   {
29     std::ranges::transform_view<CopyableView, PlusOne> transformView;
30     CopyableView base1 = transformView.base();
31     ASSERT_SAME_TYPE(CopyableView, decltype(transformView.base()));
32     assert(std::ranges::begin(base1) == globalBuff);
33 
34     CopyableView base2 = std::move(transformView).base();
35     ASSERT_SAME_TYPE(CopyableView, decltype(std::move(transformView).base()));
36     assert(std::ranges::begin(base2) == globalBuff);
37   }
38 
39   {
40     const std::ranges::transform_view<CopyableView, PlusOne> transformView;
41     const CopyableView base1 = transformView.base();
42     ASSERT_SAME_TYPE(CopyableView, decltype(transformView.base()));
43     assert(std::ranges::begin(base1) == globalBuff);
44 
45     const CopyableView base2 = std::move(transformView).base();
46     ASSERT_SAME_TYPE(CopyableView, decltype(std::move(transformView).base()));
47     assert(std::ranges::begin(base2) == globalBuff);
48   }
49 
50   return true;
51 }
52 
53 int main(int, char**) {
54   test();
55   static_assert(test());
56 
57   return 0;
58 }
59