次のコードが整形式である理由:
void foo(int i, int j = 56);
void foo(int i = 42, int j);
int main(){ }
しかし、次の
void foo(int i = 42, int j);
void foo(int i, int j = 56);
int main(){ }
は不正です。を調べてみたN4296::8.3.6 [dcl.fct.default]
ところ、次の例が見つかりました。
class C
{
void f(int i = 3);
void g(int i, int j = 99);
};
void C::f(int i = 3) { } //error
void C::g(int i = 88, int j) { // C::g can be called with no argument
}
しかし、clang はそうではないようです。
struct A
{
void foo(int i = 42, int j);
};
void A::foo(int i, int j = 56){ }; //error
int main(){ }
それで、それは実装上の問題ですか?正式には、この例はすべて受け入れられるはずですよね?