blob: 8ecdc548871368d3783c02fd5b1363cc2760136a (
plain) (
blame)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
// Combinations of templates and structure inheritance.
//
// Created by Alex Ott.
template <typename DerivedT>
struct grammar {
public:
typedef grammar<DerivedT> self_t;
typedef DerivedT const& embed_t;
grammar() {}
~grammar() { }
void use_parser() const { }
void test1() { }
};
struct PDFbool_parser : public grammar<PDFbool_parser> {
PDFbool_parser() {}
template <typename scannerT> struct definition {
typedef typename scannerT::iterator_t iterator_t;
int top;
definition(const PDFbool_parser& /*self*/) {
return ;
}
const int start() const {
return top;
}
};
};
int main(void) {
PDFbool_parser PDFbool_p = PDFbool_parser();
PDFbool_p.//-1-
;
// #1# ("definition" "embed_t" "self_t" "test1" "use_parser")
}
// ----------------------------------------------------------------------
template <class Derived> struct Base {
public:
void interface()
{
// ...
static_cast<Derived*>(this)->implementation();
// ...
}
static void static_func()
{
// ...
Derived::static_sub_func();
// ...
}
};
struct Derived : Base<Derived> {
void implementation() { }
static void static_sub_func() { }
};
int foo () {
Derived d;
d.//-2-
;
// #2# ("implementation" "interface" "static_func" "static_sub_func")
}
// arch-tag: d6e39f96-525e-44af-8cd1-d03e1829acd3
|