https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67434
--- Comment #2 from sthlm58 at gmail dot com --- (In reply to Jonathan Wakely from comment #1) > (In reply to Michal Kucharski from comment #0) > > std::chrono::duration<double> benchmark( ) > > { > > std::random_device rd; > > > > std::chrono::duration<double> total; > > You have not initialized this variable. > > > > > for (int i = 0; i < 100; i++) > > { > > auto t1 = std::chrono::high_resolution_clock::now(); > > auto t2 = std::chrono::high_resolution_clock::now(); > > total += std::chrono::duration_cast<std::chrono::duration<double>>(t2 - > > t1); > > This has undefined behaviour because you are performing addition on an > uninitialized value. You could have found this with valgrind. In other words, here 'total' was default-initialized (hence unspecified) thus causing undefined behavior. It it were value-initialized e.g. with '{}' the problem would not happen.