//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <memory>
// unique_ptr
// test swap
#include<memory>#include<cassert>#include"../../deleter.h"structA{intstate_;staticintcount;explicitA(inti):state_(i){++count;}A(constA&a):state_(a.state_){++count;}A&operator=(constA&a){state_=a.state_;return*this;}~A(){--count;}friendbooloperator==(constA&x,constA&y){returnx.state_==y.state_;}};intA::count=0;intmain(){{A*p1=newA(1);std::unique_ptr<A,Deleter<A>>s1(p1,Deleter<A>(1));A*p2=newA(2);std::unique_ptr<A,Deleter<A>>s2(p2,Deleter<A>(2));assert(s1.get()==p1);assert(*s1==A(1));assert(s1.get_deleter().state()==1);assert(s2.get()==p2);assert(*s2==A(2));assert(s2.get_deleter().state()==2);s1.swap(s2);assert(s1.get()==p2);assert(*s1==A(2));assert(s1.get_deleter().state()==2);assert(s2.get()==p1);assert(*s2==A(1));assert(s2.get_deleter().state()==1);assert(A::count==2);}assert(A::count==0);}