brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 496f68f Raw
58 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: c++03, c++11, c++14, c++1710 11// constexpr V base() const& requires copy_constructible<V>12// constexpr V base() &&13 14#include <ranges>15 16#include "test_macros.h"17#include "types.h"18 19constexpr bool test() {20  {21    std::ranges::transform_view<MoveOnlyView, PlusOne> transformView;22    MoveOnlyView base = std::move(transformView).base();23    ASSERT_SAME_TYPE(MoveOnlyView, decltype(std::move(transformView).base()));24    assert(std::ranges::begin(base) == globalBuff);25  }26 27  {28    std::ranges::transform_view<CopyableView, PlusOne> transformView;29    CopyableView base1 = transformView.base();30    ASSERT_SAME_TYPE(CopyableView, decltype(transformView.base()));31    assert(std::ranges::begin(base1) == globalBuff);32 33    CopyableView base2 = std::move(transformView).base();34    ASSERT_SAME_TYPE(CopyableView, decltype(std::move(transformView).base()));35    assert(std::ranges::begin(base2) == globalBuff);36  }37 38  {39    const std::ranges::transform_view<CopyableView, PlusOne> transformView;40    const CopyableView base1 = transformView.base();41    ASSERT_SAME_TYPE(CopyableView, decltype(transformView.base()));42    assert(std::ranges::begin(base1) == globalBuff);43 44    const CopyableView base2 = std::move(transformView).base();45    ASSERT_SAME_TYPE(CopyableView, decltype(std::move(transformView).base()));46    assert(std::ranges::begin(base2) == globalBuff);47  }48 49  return true;50}51 52int main(int, char**) {53  test();54  static_assert(test());55 56  return 0;57}58