1// Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 2, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING. If not, write to the Free 16// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 17// USA. 18 19// 20.4.5 Template class auto_ptr [lib.auto.ptr] 20 21#include <memory> 22#include <testsuite_hooks.h> 23 24struct A 25{ 26 A() { ++ctor_count; } 27 virtual ~A() { ++dtor_count; } 28 static long ctor_count; 29 static long dtor_count; 30}; 31long A::ctor_count = 0; 32long A::dtor_count = 0; 33 34struct B : A 35{ 36 B() { ++ctor_count; } 37 virtual ~B() { ++dtor_count; } 38 static long ctor_count; 39 static long dtor_count; 40}; 41long B::ctor_count = 0; 42long B::dtor_count = 0; 43 44 45struct reset_count_struct 46{ 47 ~reset_count_struct() 48 { 49 A::ctor_count = 0; 50 A::dtor_count = 0; 51 B::ctor_count = 0; 52 B::dtor_count = 0; 53 } 54}; 55 56// Construction from std::auto_ptr 57int 58test02() 59{ 60 reset_count_struct __attribute__((unused)) reset; 61 bool test __attribute__((unused)) = true; 62 63 std::auto_ptr<A> A_from_A(new A); 64 std::auto_ptr<B> B_from_B(new B); 65 66 std::auto_ptr<A> A_from_ptr_A(A_from_A); 67 std::auto_ptr<A> A_from_ptr_B(B_from_B); 68 VERIFY( A_from_A.get() == 0 ); 69 VERIFY( B_from_B.get() == 0 ); 70 VERIFY( A_from_ptr_A.get() != 0 ); 71 VERIFY( A_from_ptr_B.get() != 0 ); 72 VERIFY( A::ctor_count == 2 ); 73 VERIFY( A::dtor_count == 0 ); 74 VERIFY( B::ctor_count == 1 ); 75 VERIFY( B::dtor_count == 0 ); 76 77 return 0; 78} 79 80int 81main() 82{ 83 test02(); 84 return 0; 85} 86