The default constructor is defaulted
constexpr duration() = default;
cout << s.count() << endl;
Default constructed durations are not zero initialized due to optimization.
Quoting Vicente J. Botet Escriba from same question in ISO C++ Discussion:
Hi, I guess is to follow the pattern don't pay for what you don't use, but Howard would explain it better.
If you want the representation to be default initialized to zero, you can just provide one that do that
std::chrono::duration<MyInt> d; // MyInt default constructor initialize the value to zero.
It is confirmed and further explained by lead designer and author of
<chrono> time utilities (Howard Hinnant)