Жжот дурилко. Все помним про вызов функции vs конструирование объекта:
struct foo { foo(int) {} };
int main() {
foo(3); // временный объект
}
vs
void foo(int){}
int main() {
foo(3); // вызов функции
}
Теперь такое:
struct foo {
foo() = default;
foo(int v) : x(v) {}
int x = 1;
static int s;
};
int foo::s; // где храним
int main() {
foo(s);
}
Да, код в main
эквивалентен:
int main() {
foo s;
}
дефолтное конструирование объекта s
Обновляем компилятор в мозгах :)