1/* This testcase is part of GDB, the GNU debugger. 2 3 Copyright 2014-2020 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18 19/* One could use unique_ptr instead, but that requires a GCC which can 20 support "-std=c++11". */ 21 22template <typename T> 23class smart_ptr 24{ 25public: 26 smart_ptr (T *obj) : _obj (obj) { } 27 ~smart_ptr () { delete _obj; } 28 29 T *operator-> (); 30 31private: 32 T *_obj; 33}; 34 35template <typename T> 36T * 37smart_ptr<T>::operator-> () 38{ 39 return _obj; 40} 41 42class A 43{ 44public: 45 virtual int func (); 46}; 47 48int 49A::func () 50{ 51 return 3; 52} 53 54int 55main () 56{ 57 A *a_ptr = 0; 58 smart_ptr<A> a (new A); 59 60 return a->func(); /* Break here */ 61} 62