dimanche 30 mars 2014

Overload à la joie

Bug bête, et qui traine en production depuis 1 mois!

De quoi s'agit-t-il? D'un bon vieux problème de surcharge. Simplifié à l’extrême, cela revient à ça:

#include <iostream>
#include <string>

void f(bool b)
{
  std::cout << "Boolean : " << b << std::endl;
}

void f(const std::string & str)
{
  std::cout << "String : " << str << std::endl;
}

int main()
{
  f("abc");
  return 0;
}

Parce que la conversion d'un type de base vers un autre type de base est prioritaire sur la conversion d'un type de base vers un objet via son constructeur, le compilo transforme notre char * en bool, et pas en std::string. Et c'est le drame.

Aucun commentaire: