brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.2 KiB · 7aef0eb Raw
57 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++1110#include <memory>11#include <string>12#include <cassert>13 14#include "test_macros.h"15 16//    The only way to create an unique_ptr<T[]> is to default construct them.17 18class foo {19public:20  TEST_CONSTEXPR_CXX23 foo() : val_(3) {}21  TEST_CONSTEXPR_CXX23 int get() const { return val_; }22 23private:24  int val_;25};26 27TEST_CONSTEXPR_CXX23 bool test() {28  {29    auto p1 = std::make_unique<int[]>(5);30    for (int i = 0; i < 5; ++i)31      assert(p1[i] == 0);32  }33 34  {35    auto p2 = std::make_unique<std::string[]>(5);36    for (int i = 0; i < 5; ++i)37      assert(p2[i].size() == 0);38  }39 40  {41    auto p3 = std::make_unique<foo[]>(7);42    for (int i = 0; i < 7; ++i)43      assert(p3[i].get() == 3);44  }45 46  return true;47}48 49int main(int, char**) {50  test();51#if TEST_STD_VER >= 2352  static_assert(test());53#endif54 55  return 0;56}57