17a6aaf9bSLouis Dionne //===----------------------------------------------------------------------===// 27a6aaf9bSLouis Dionne // 37a6aaf9bSLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 47a6aaf9bSLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 57a6aaf9bSLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 67a6aaf9bSLouis Dionne // 77a6aaf9bSLouis Dionne //===----------------------------------------------------------------------===// 87a6aaf9bSLouis Dionne 97a6aaf9bSLouis Dionne // <memory> 107a6aaf9bSLouis Dionne 117a6aaf9bSLouis Dionne // template <class X> class auto_ptr; 127a6aaf9bSLouis Dionne 137a6aaf9bSLouis Dionne // template<class Y> auto_ptr& operator=(auto_ptr<Y>& a) throw(); 147a6aaf9bSLouis Dionne 15*61f2b3edSLouis Dionne // ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS 167a6aaf9bSLouis Dionne 177a6aaf9bSLouis Dionne #include <memory> 187a6aaf9bSLouis Dionne #include <cassert> 197a6aaf9bSLouis Dionne 207a6aaf9bSLouis Dionne #include "../AB.h" 217a6aaf9bSLouis Dionne 227a6aaf9bSLouis Dionne void test()237a6aaf9bSLouis Dionnetest() 247a6aaf9bSLouis Dionne { 257a6aaf9bSLouis Dionne { 267a6aaf9bSLouis Dionne B* p1 = new B(1); 277a6aaf9bSLouis Dionne const std::auto_ptr<B> ap1(p1); 287a6aaf9bSLouis Dionne A* p2 = new A(2); 297a6aaf9bSLouis Dionne std::auto_ptr<A> ap2(p2); 307a6aaf9bSLouis Dionne assert(A::count == 2); 317a6aaf9bSLouis Dionne assert(B::count == 1); 327a6aaf9bSLouis Dionne assert(ap1.get() == p1); 337a6aaf9bSLouis Dionne assert(ap2.get() == p2); 347a6aaf9bSLouis Dionne std::auto_ptr<A>& apr = ap2 = ap1; 357a6aaf9bSLouis Dionne assert(&apr == &ap2); 367a6aaf9bSLouis Dionne assert(A::count == 1); 377a6aaf9bSLouis Dionne assert(B::count == 1); 387a6aaf9bSLouis Dionne assert(ap1.get() == 0); 397a6aaf9bSLouis Dionne assert(ap2.get() == p1); 407a6aaf9bSLouis Dionne } 417a6aaf9bSLouis Dionne assert(A::count == 0); 427a6aaf9bSLouis Dionne assert(B::count == 0); 437a6aaf9bSLouis Dionne } 447a6aaf9bSLouis Dionne main(int,char **)457a6aaf9bSLouis Dionneint main(int, char**) 467a6aaf9bSLouis Dionne { 477a6aaf9bSLouis Dionne test(); 487a6aaf9bSLouis Dionne 497a6aaf9bSLouis Dionne return 0; 507a6aaf9bSLouis Dionne } 51