nullptr.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//===----------------------------------------------------------------------===//
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//
3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//                     The LLVM Compiler Infrastructure
459d709d503bab6e2b61931737e662dd293b40578ccornelius//
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This file is distributed under the University of Illinois Open Source
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// License. See LICENSE.TXT for details.
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//===----------------------------------------------------------------------===//
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// <memory>
1127f654740f2a26ad62a5c155af9199af9e69b889claireho
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// unique_ptr
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test unique_ptr move assignment
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <memory>
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <cassert>
1859d709d503bab6e2b61931737e662dd293b40578ccornelius
1959d709d503bab6e2b61931737e662dd293b40578ccornelius// test assignment from null
2059d709d503bab6e2b61931737e662dd293b40578ccornelius
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct A
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static int count;
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    A() {++count;}
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    A(const A&) {++count;}
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    ~A() {--count;}
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint A::count = 0;
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint main()
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    {
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    std::unique_ptr<A> s2(new A);
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assert(A::count == 1);
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    s2 = nullptr;
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assert(A::count == 0);
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assert(s2.get() == 0);
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    }
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    assert(A::count == 0);
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru