//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <memory>
// shared_ptr
// template<class T, class... Args> shared_ptr<T> make_shared(Args&&... args);
#include<memory>#include<new>#include<cstdlib>#include<cassert>intnew_count=0;void*operatornew(std::size_ts)throw(std::bad_alloc){++new_count;returnstd::malloc(s);}voidoperatordelete(void*p)throw(){std::free(p);}structA{staticintcount;A(inti,charc):int_(i),char_(c){++count;}A(constA&a):int_(a.int_),char_(a.char_){++count;}~A(){--count;}intget_int()const{returnint_;}charget_char()const{returnchar_;}private:intint_;charchar_;};intA::count=0;intmain(){intnc=new_count;{inti=67;charc='e';std::shared_ptr<A>p=std::make_shared<A>(i,c);assert(new_count==nc+1);assert(A::count==1);assert(p->get_int()==67);assert(p->get_char()=='e');}assert(A::count==0);}