move_convert04.fail.cpp revision c52f43e72dfcea03037729649da84c23b3beb04a
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <memory>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// unique_ptr
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test unique_ptr converting move assignment
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <memory>
174ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include <cassert>
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Can't assign from const lvalue
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct A
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int count;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    A() {++count;}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    A(const A&) {++count;}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~A() {--count;}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int A::count = 0;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct B
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public A
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static int count;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    B() {++count;}
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    B(const B&) {++count;}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~B() {--count;}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int B::count = 0;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)int main()
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    {
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    const boost::unique_ptr<B[]> s(new B);
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    A* p = s.get();
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    boost::unique_ptr<A[]> s2;
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    s2 = s;
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    assert(s2.get() == p);
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    assert(s.get() == 0);
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    assert(A::count == 1);
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    assert(B::count == 1);
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    }
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    assert(A::count == 0);
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    assert(B::count == 0);
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)