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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
// { dg-do run }
// extern "C" printf(const char *, ...);
class X
{
public:
int a;
int f(int);
};
class Y
{
public:
int b;
int c;
int g(int);
};
class MD : public X, public Y
{
public:
int c;
int hf(int);
};
int MD::* pmi0 = &MD::a;
int MD::* pmi1 = &MD::b;
int MD::* pmi2 = &MD::c;
int (MD::* pmf0)(int) = &MD::f;
int (MD::* pmf1)(int) = &MD::g;
int (MD::* pmf2)(int) = &MD::hf;
int main()
{
MD obj;
int fail = 0;
obj.a = 1;
obj.b = 2;
obj.c = 3;
obj.*pmi0 = 7;
obj.*pmi1 = 8;
obj.*pmi2 = 9;
fail += (obj.*pmf0)(7);
fail += (obj.*pmf1)(8);
fail += (obj.*pmf2)(9);
#if 0
if (fail != 0)
printf ("failed %d tests\n", fail);
else
printf ("passed\n");
printf ("sizeof(X) = %d, sizeof(Y) = %d, sizeof(MD) = %d\n",
sizeof(X), sizeof(Y), sizeof(MD));
#endif
return fail;
}
int X::f(int v)
{
if (v != a)
{
// printf ("failed in X::f, a = %d\n", a);
return 1;
}
return 0;
}
int Y::g(int v)
{
if (v != b)
{
// printf ("failed in Y::g, b = %d\n", b);
return 1;
}
return 0;
}
int MD::hf(int v)
{
if (v != c)
{
// printf ("failed in MD::hf, c = %d\n", c);
return 1;
}
return 0;
}
|