nullptr_t_deleter.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//===----------------------------------------------------------------------===//
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//                     The LLVM Compiler Infrastructure
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//
5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang// This file is distributed under the University of Illinois Open Source
6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato// License. See LICENSE.TXT for details.
7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//
8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato//===----------------------------------------------------------------------===//
9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato// <memory>
11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato// shared_ptr
13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato// template<class D> shared_ptr(nullptr_t, D d);
15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include <memory>
17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include <cassert>
18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato#include "../test_deleter.h"
19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratostruct A
21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{
22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    static int count;
23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    A() {++count;}
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    A(const A&) {++count;}
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ~A() {--count;}
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato};
28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoint A::count = 0;
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoint main()
32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{
33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    {
34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    std::shared_ptr<A> p(nullptr, test_deleter<A>(3));
35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(A::count == 0);
36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(p.use_count() == 1);
37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(p.get() == 0);
38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    test_deleter<A>* d = std::get_deleter<test_deleter<A> >(p);
39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(test_deleter<A>::count == 1);
40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(test_deleter<A>::dealloc_count == 0);
41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(d);
42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(d->state() == 3);
43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    }
44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(A::count == 0);
45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(test_deleter<A>::count == 0);
46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    assert(test_deleter<A>::dealloc_count == 1);
47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato