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