brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 67e55bf Raw
78 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// <memory>10 11// unique_ptr12 13// test get_deleter()14 15#include <memory>16#include <cassert>17#include <type_traits>18 19#include "test_macros.h"20 21struct Deleter {22  TEST_CONSTEXPR_CXX23 Deleter() {}23 24  TEST_CONSTEXPR_CXX23 void operator()(void*) const {}25 26  TEST_CONSTEXPR_CXX23 int test() { return 5; }27  TEST_CONSTEXPR_CXX23 int test() const { return 6; }28};29 30template <bool IsArray>31TEST_CONSTEXPR_CXX23 void test_basic() {32  typedef typename std::conditional<IsArray, int[], int>::type VT;33  {34    std::unique_ptr<int, Deleter> p;35    assert(p.get_deleter().test() == 5);36  }37  {38    const std::unique_ptr<VT, Deleter> p;39    assert(p.get_deleter().test() == 6);40  }41  {42    typedef std::unique_ptr<VT, const Deleter&> UPtr;43    const Deleter d;44    UPtr p(nullptr, d);45    const UPtr& cp = p;46    ASSERT_SAME_TYPE(decltype(p.get_deleter()), const Deleter&);47    ASSERT_SAME_TYPE(decltype(cp.get_deleter()), const Deleter&);48    assert(p.get_deleter().test() == 6);49    assert(cp.get_deleter().test() == 6);50  }51  {52    typedef std::unique_ptr<VT, Deleter&> UPtr;53    Deleter d;54    UPtr p(nullptr, d);55    const UPtr& cp = p;56    ASSERT_SAME_TYPE(decltype(p.get_deleter()), Deleter&);57    ASSERT_SAME_TYPE(decltype(cp.get_deleter()), Deleter&);58    assert(p.get_deleter().test() == 5);59    assert(cp.get_deleter().test() == 5);60  }61}62 63TEST_CONSTEXPR_CXX23 bool test() {64  test_basic</*IsArray*/ false>();65  test_basic<true>();66 67  return true;68}69 70int main(int, char**) {71  test();72#if TEST_STD_VER >= 2373  static_assert(test());74#endif75 76  return 0;77}78