Bon il faut dire que j'ai poussé un peu le compilateur dans ses dernier retranchement, m'enfin quand même :
Bête comme il est VC7 (pourtant un bon compilateur hein !), il m'appelles A::f() au lieu de C::f() !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 class A { public: inline virtual int f() const; }; class B : public A { }; class C : public B { public: inline int f() const; inline int g() const; }; int C::f() const { return B::f() + 1; } int C::g() const { return f(); } int main() { C c; printf("g() = %d\n", c.g()); return 0; }
Note : l'exemple n'a pas été testé, le bug est dans du code beaucoup + compliqué, mais je crois avoir mis le principe du problèmes dans mon exemple.
EDIT : résolu, je crois avoir fait trop joujou avec les vtable ... désolé pour ce mauvais post.
Partager