このコードは、関数の最初の宣言で、最後のパラメーターに次のようなデフォルト値がある場合に機能します。
//declaration
void error(char const *msg, bool showKind, bool exit = false);
そして、同じスコープで、後の宣言で、他の引数のデフォルト値を(右側から)次のように指定できます。
void error(char const *msg, bool showKind = true, bool exit); //okay
//void error(char const *msg = 0 , bool showKind, bool exit); // error
これは次のように呼び出すことができます:
error("some error messsage");
error("some error messsage", false);
error("some error messsage", false, true);
オンラインデモ: http: //ideone.com/aFpUn
最初のパラメーター(左から)にデフォルト値を指定し、2番目のパラメーターにデフォルト値を指定しない場合、(期待どおりに)コンパイルされないことに注意してください:http://ideone.com/5hj46
§8.3.6/4は言う、
テンプレート以外の関数の場合、デフォルトの引数を同じスコープ内の関数の後の宣言に追加できます。
標準自体からの例:
void f(int, int);
void f(int, int = 7);
2番目の宣言はデフォルト値を追加します!
§8.3.6/6も参照してください。