Почему следующий код правильно сформирован:
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
}
Но кланг так не кажется.
struct A
{
void foo(int i = 42, int j);
};
void A::foo(int i, int j = 56){ }; //error
int main(){ }
Так это проблема реализации? Формально весь этот пример должен быть приемлем, не так ли?