Bon j'en ai marre. Le truc qui me fait particulièrement chier avec le c++ ces derniers temps c'est ce genre de truc:

class Foo {
  virtual void quack(bool like_a_duck) const { cout << "miaou"; }
};

class Bar : public Foo {
  void quack(bool) { cout << "coin"; }
  /* RRRRAAAATAAAAAAIIIII J'AI OUBLIE LE CONST COMME UN
      GROS NUL ET LE COMPILO NE VA RIEN ME DIRE */
};

Ce que je voudrais, c'est pouvoir dire au compilateur cette fonction "quack(bool)" que je definis ici dans ma classe dérivée, c'est une fonction qui surcharge une fonction virtuelle "quack(bool)" définie dans une classe parente. Si tu ne trouves pas de fonction "quack(bool)" dans les classes parentes qui soit virtuelle, ça veut dire que j'ai fait une connerie (j'ai oublié un const, ou un & etc...) et je veux que toi, compilateur, tu fasses une erreur. Les fonctions virtuelles pures c'est bien gentil mais y'a des fois où elles ne sont pas pures et qu'on a quand même besoin de les overrider.

Un moyen d'annoter les fonctions qu'on override ça aurait l'avantage:

  • de documenter le code pour que je vois d'un coup d'oeil quelles sont celles qui sont des fonctions virtuelles overridées.
  • de vérifier que je ne me suis pas planté dans son prototype.
  • de m'économiser quelques heures de chasse au bug.

Sur codeproject y'a une tentative d'annotation des fonctions virtuelles mais c'est pas super élégant ... Y'a aussi un warning specifique dans g++ qui essaye de detecter ce genre de bugs mais c'est un truc heuristique et donc y'a des faux-positifs -> c'est de la merde.