#include <iostream>
template <typename T>
T default_construct() { return T{}; }
template <typename T, T(INIT)() = &default_construct<T>>
struct Foo
{
T value = INIT();
};
int bar() { return 42; }
int main()
{
Foo<int> f;
Foo<int, bar> b;
std::cout << f.value << std::endl;
std::cout << b.value << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClQgZGVmYXVsdF9jb25zdHJ1Y3QoKSB7IHJldHVybiBUe307IH0KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBUKElOSVQpKCkgPSAmZGVmYXVsdF9jb25zdHJ1Y3Q8VD4+CnN0cnVjdCBGb28KewogICAgVCB2YWx1ZSA9IElOSVQoKTsKfTsKCmludCBiYXIoKSB7IHJldHVybiA0MjsgfQoKaW50IG1haW4oKQp7CiAgICBGb288aW50PiBmOwogICAgRm9vPGludCwgYmFyPiBiOwoKICAgIHN0ZDo6Y291dCA8PCBmLnZhbHVlIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCBiLnZhbHVlIDw8IHN0ZDo6ZW5kbDsKfQoK