http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53841



Richard Smith <richard-gccbugzilla at metafoo dot co.uk> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

                 CC|                            |richard-gccbugzilla at

                   |                            |metafoo dot co.uk



--- Comment #3 from Richard Smith <richard-gccbugzilla at metafoo dot co.uk> 
2012-11-14 23:06:07 UTC ---

This code has more problems with duration conversions:



    // DR 887 - Sync unknown clock to known clock.

    const typename _Clock::time_point __c_entry = _Clock::now();

    const __clock_t::time_point __s_entry = __clock_t::now();

    const chrono::nanoseconds __delta = __atime - __c_entry;

    const __clock_t::time_point __s_atime = __s_entry + __delta;



The last line attempts to implicitly convert from time_point<[...],

nanoseconds> to system_clock::time_point, which may be in microseconds or even

in seconds.



Suggested fix:



-    const chrono::nanoseconds __delta = __atime - __c_entry;

-    const __clock_t::time_point __s_atime = __s_entry + __delta;

+    const auto __delta = __atime - __c_entry;

+    const auto __s_atime = __s_entry + __delta;



Clang trunk currently rejects this code (prior to instantiation, even) due to

this invalid conversion if _GLIBCXX_USE_CLOCK_REALTIME is not defined (as seems

to be the case on several popular linux distributions).

Reply via email to