summaryrefslogtreecommitdiff
path: root/tests/run/cpp_template_subclasses_helper.h
blob: 3bb683785df71b8782c5d0e5f1129115c63a79ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using namespace std;

class Base {
public:
    virtual const char* name() { return "Base"; }
    virtual ~Base() {}
};

template <class A1>
class A : public Base {
public:
    virtual const char* name() { return "A"; }
    A1 funcA(A1 x) { return x; }
};

template <class B1, class B2>
class B : public A<B2> {
public:
    virtual const char* name() { return "B"; }
    pair<B1, B2> funcB(B1 x, B2 y) { return pair<B1, B2>(x, y); }
};

template <class C1>
class C : public B<long, C1> {
public:
    virtual const char* name() { return "C"; }
    C1 funcC(C1 x) { return x; }
};

template <class D1>
class D : public C<pair<D1, D1> > {
    virtual const char* name() { return "D"; }
};

class E : public D<double> {
    virtual const char* name() { return "E"; }
};