1 /* Copyright Bruno da Silva de Oliveira 2003. Use, modification and
2  distribution is subject to the Boost Software License, Version 1.0.
3  (See accompanying file LICENSE_1_0.txt or copy at
4  http://www.boost.org/LICENSE_1_0.txt)
5  */
6 namespace virtual_ {
7 
8 struct C
9 {
10 public:
fC11     virtual int f()
12     {
13         return f_abs();
14     }
15 
barC16     virtual void bar(int) {}
barC17     virtual void bar(char*) {}
18 
get_nameC19     const char* get_name()
20     {
21         return name();
22     }
dummyC23     virtual int dummy() { return 0; }
24 
25 protected:
26     virtual int f_abs() = 0;
27 
28 private:
nameC29     virtual const char* name() { return "C"; }
30 };
31 
32 struct D
33 {
dummyD34     virtual int dummy() { return 0; }
35 };
36 
call_f(C & c)37 inline int call_f(C& c) { return c.f(); }
call_dummy(C * c)38 inline int call_dummy(C* c) { return c->dummy(); }
call_dummy(D * d)39 inline int call_dummy(D* d) { return d->dummy(); }
40 
41 }
42