鍋あり谷あり

テーマを決めずに適当に書いています。

デフォルト引数の不思議な仕様

C++のデフォルト引数でもうちょっと気持ちの悪いことをしようと考えたんだが、先日の例を超えるものはできなかった。
foo operator+(foo,foo); の第二引数にデフォルト引数を入れたら面白いかと思ったら、コンパイルエラーだった。意外とまとも。

というわけで、地味に不思議な仕様の話。ニーズはあるのかぁと思いつつ。

void foo( int a, int b ){  std::cout << a << " " << b << "\n";  }
void foo( int, int=123 ); // 最後の引数にデフォルト値を設定。これは普通。
void foo( int=456, int ); // 最後の引数のデフォルト値は設定済みなので、その前を設定。

というわけで。
仕様によると、どうも、最後の引数にデフォルト値が設定済みの場合、その前の値だけにデフォルト値を設定できるらしい。
両方設定するとエラーになるのはわかるけど、だからといってその前だけを設定できるのもどうかと思う。