//===----------------------------------------------------------------------===//
//
// 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;A():state_(0){++count;}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[3];std::unique_ptr<A[],Deleter<A[]>>s1(p1,Deleter<A[]>(1));A*p2=newA[3];std::unique_ptr<A[],Deleter<A[]>>s2(p2,Deleter<A[]>(2));assert(s1.get()==p1);assert(s1.get_deleter().state()==1);assert(s2.get()==p2);assert(s2.get_deleter().state()==2);s1.swap(s2);assert(s1.get()==p2);assert(s1.get_deleter().state()==2);assert(s2.get()==p1);assert(s2.get_deleter().state()==1);assert(A::count==6);}assert(A::count==0);}