Que le code du travail si, dans la première déclaration de la fonction, le dernier paramètre a la valeur par défaut, quelque chose comme ceci:
//declaration
void error(char const *msg, bool showKind, bool exit = false);
Et puis dans le même champ d'application que vous pouvez fournir des valeurs par défaut pour les autres arguments (du côté droit), dans la dernière déclaration:
void error(char const *msg, bool showKind = true, bool exit); //okay
//void error(char const *msg = 0 , bool showKind, bool exit); // error
qui peut appelé comme:
error("some error messsage");
error("some error messsage", false);
error("some error messsage", false, true);
Démo en ligne : http://ideone.com/aFpUn
Remarque si vous fournissez la valeur par défaut pour le premier paramètre (à partir de la gauche), sans fournir de la valeur par défaut pour le second, il ne compile pas (comme prévu) : http://ideone.com/5hj46
§8.3.6/4 dit,
Pour les non-modèle de fonctions, par défaut
les arguments peuvent être ajoutés plus tard
les déclarations de fonction dans la même
la portée.
Exemple de la Norme elle-même:
void f(int, int);
void f(int, int = 7);
La deuxième déclaration ajoute de la valeur par défaut!
Voir aussi §8.3.6/6.