brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 0daff7d Raw
49 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// join_view() requires default_initializable<V> = default;12 13#include <cassert>14#include <ranges>15 16#include "types.h"17 18struct DefaultView : std::ranges::view_base {19  int i; // deliberately uninitialised20 21  ChildView* begin() const;22  ChildView* end() const;23};24 25constexpr bool test() {26  {27    std::ranges::join_view<ParentView<ChildView>> jv;28    assert(std::move(jv).base().ptr_ == globalChildren);29  }30 31  // Default constructor should value initialise underlying view32  {33    std::ranges::join_view<DefaultView> jv;34    assert(jv.base().i == 0);35  }36 37  static_assert( std::default_initializable<std::ranges::join_view<ParentView<ChildView>>>);38  static_assert(!std::default_initializable<std::ranges::join_view<CopyableParent>>);39 40  return true;41}42 43int main(int, char**) {44  test();45  static_assert(test());46 47  return 0;48}49