Bon il faut dire que j'ai poussé un peu le compilateur dans ses dernier retranchement, m'enfin quand même :

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;
}
Bête comme il est VC7 (pourtant un bon compilateur hein !), il m'appelles A::f() au lieu de C::f() !!!

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.