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-no-concepts 11 // UNSUPPORTED: gcc-10 12 // UNSUPPORTED: libcpp-has-no-incomplete-ranges 13 14 // constexpr V base() const& requires copy_constructible<V> 15 // constexpr V base() && 16 17 #include <ranges> 18 19 #include "test_macros.h" 20 #include "types.h" 21 22 constexpr bool test() { 23 { 24 std::ranges::transform_view<ContiguousView, Increment> transformView; 25 ContiguousView base = std::move(transformView).base(); 26 ASSERT_SAME_TYPE(ContiguousView, decltype(std::move(transformView).base())); 27 assert(std::ranges::begin(base) == globalBuff); 28 } 29 30 { 31 std::ranges::transform_view<CopyableView, Increment> transformView; 32 CopyableView base1 = transformView.base(); 33 ASSERT_SAME_TYPE(CopyableView, decltype(transformView.base())); 34 assert(std::ranges::begin(base1) == globalBuff); 35 36 CopyableView base2 = std::move(transformView).base(); 37 ASSERT_SAME_TYPE(CopyableView, decltype(std::move(transformView).base())); 38 assert(std::ranges::begin(base2) == globalBuff); 39 } 40 41 { 42 const std::ranges::transform_view<CopyableView, Increment> transformView; 43 const CopyableView base1 = transformView.base(); 44 ASSERT_SAME_TYPE(CopyableView, decltype(transformView.base())); 45 assert(std::ranges::begin(base1) == globalBuff); 46 47 const CopyableView base2 = std::move(transformView).base(); 48 ASSERT_SAME_TYPE(CopyableView, decltype(std::move(transformView).base())); 49 assert(std::ranges::begin(base2) == globalBuff); 50 } 51 52 return true; 53 } 54 55 int main(int, char**) { 56 test(); 57 static_assert(test()); 58 59 return 0; 60 } 61