brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · e14da8d Raw
73 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 T* begin() noexcept;12// constexpr const T* begin() const noexcept;13 14#include <ranges>15#include <cassert>16 17#include "test_macros.h"18 19struct Empty {};20struct BigType { char buffer[64] = {10}; };21 22constexpr bool test() {23  {24    auto sv = std::ranges::single_view<int>(42);25    assert(*sv.begin() == 42);26 27    ASSERT_SAME_TYPE(decltype(sv.begin()), int*);28    static_assert(noexcept(sv.begin()));29  }30  {31    const auto sv = std::ranges::single_view<int>(42);32    assert(*sv.begin() == 42);33 34    ASSERT_SAME_TYPE(decltype(sv.begin()), const int*);35    static_assert(noexcept(sv.begin()));36  }37 38  {39    auto sv = std::ranges::single_view<Empty>(Empty());40    assert(sv.begin() != nullptr);41 42    ASSERT_SAME_TYPE(decltype(sv.begin()), Empty*);43  }44  {45    const auto sv = std::ranges::single_view<Empty>(Empty());46    assert(sv.begin() != nullptr);47 48    ASSERT_SAME_TYPE(decltype(sv.begin()), const Empty*);49  }50 51  {52    auto sv = std::ranges::single_view<BigType>(BigType());53    assert(sv.begin()->buffer[0] == 10);54 55    ASSERT_SAME_TYPE(decltype(sv.begin()), BigType*);56  }57  {58    const auto sv = std::ranges::single_view<BigType>(BigType());59    assert(sv.begin()->buffer[0] == 10);60 61    ASSERT_SAME_TYPE(decltype(sv.begin()), const BigType*);62  }63 64  return true;65}66 67int main(int, char**) {68  test();69  static_assert(test());70 71  return 0;72}73