brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 06d3543 Raw
60 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 R& base() & noexcept { return r_; }12// constexpr const R& base() const& noexcept { return r_; }13// constexpr R&& base() && noexcept { return std::move(r_); }14// constexpr const R&& base() const&& noexcept { return std::move(r_); }15 16#include <ranges>17 18#include <cassert>19#include <concepts>20 21#include "test_macros.h"22 23struct Base {24  int *begin() const;25  int *end() const;26};27 28constexpr bool test()29{30  using OwningView = std::ranges::owning_view<Base>;31  OwningView ov;32  decltype(auto) b1 = static_cast<OwningView&>(ov).base();33  decltype(auto) b2 = static_cast<OwningView&&>(ov).base();34  decltype(auto) b3 = static_cast<const OwningView&>(ov).base();35  decltype(auto) b4 = static_cast<const OwningView&&>(ov).base();36 37  ASSERT_SAME_TYPE(decltype(b1), Base&);38  ASSERT_SAME_TYPE(decltype(b2), Base&&);39  ASSERT_SAME_TYPE(decltype(b3), const Base&);40  ASSERT_SAME_TYPE(decltype(b4), const Base&&);41 42  assert(&b1 == &b2);43  assert(&b1 == &b3);44  assert(&b1 == &b4);45 46  ASSERT_NOEXCEPT(static_cast<OwningView&>(ov).base());47  ASSERT_NOEXCEPT(static_cast<OwningView&&>(ov).base());48  ASSERT_NOEXCEPT(static_cast<const OwningView&>(ov).base());49  ASSERT_NOEXCEPT(static_cast<const OwningView&&>(ov).base());50 51  return true;52}53 54int main(int, char**) {55  test();56  static_assert(test());57 58  return 0;59}60