support folly::chrono::coarse_steady_clock with c++17
authorPádraig Brady <pbrady@fb.com>
Tue, 23 Jan 2018 02:26:46 +0000 (18:26 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Tue, 23 Jan 2018 02:35:59 +0000 (18:35 -0800)
Summary:
Move the coarse_steady_clock definition outside
the c++ < 17 specific defines, as otherwise it's not
defined when using -std=gnu++17.

Reviewed By: yfeldblum

Differential Revision: D6780601

fbshipit-source-id: 35cc5aa10db7d890e17bf03cc5e80803a9356d7a

folly/Chrono.h

index 72b2311..2345e9e 100644 (file)
@@ -45,35 +45,6 @@ namespace chrono {
 
 namespace folly {
 namespace chrono {
-namespace detail {
-[[noreturn]] FOLLY_NOINLINE inline void throw_coarse_steady_clock_now_exn() {
-  throw std::runtime_error("Error using CLOCK_MONOTONIC_COARSE.");
-}
-} // namespace detail
-
-struct coarse_steady_clock {
-  using rep = std::chrono::milliseconds::rep;
-  using period = std::chrono::milliseconds::period;
-  using duration = std::chrono::duration<rep, period>;
-  using time_point = std::chrono::time_point<coarse_steady_clock, duration>;
-  constexpr static bool is_steady = true;
-
-  static time_point now() {
-#ifndef CLOCK_MONOTONIC_COARSE
-    return time_point(std::chrono::duration_cast<duration>(
-        std::chrono::steady_clock::now().time_since_epoch()));
-#else
-    timespec ts;
-    auto ret = clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
-    if (ret != 0) {
-      detail::throw_coarse_steady_clock_now_exn();
-    }
-    return time_point(std::chrono::duration_cast<duration>(
-        std::chrono::seconds(ts.tv_sec) +
-        std::chrono::nanoseconds(ts.tv_nsec)));
-#endif
-  }
-};
 
 namespace detail {
 
@@ -185,3 +156,37 @@ constexpr std::chrono::time_point<Clock, To> round(
 } // namespace folly
 
 #endif
+
+namespace folly {
+namespace chrono {
+namespace detail {
+[[noreturn]] FOLLY_NOINLINE inline void throw_coarse_steady_clock_now_exn() {
+  throw std::runtime_error("Error using CLOCK_MONOTONIC_COARSE.");
+}
+} // namespace detail
+
+struct coarse_steady_clock {
+  using rep = std::chrono::milliseconds::rep;
+  using period = std::chrono::milliseconds::period;
+  using duration = std::chrono::duration<rep, period>;
+  using time_point = std::chrono::time_point<coarse_steady_clock, duration>;
+  constexpr static bool is_steady = true;
+
+  static time_point now() {
+#ifndef CLOCK_MONOTONIC_COARSE
+    return time_point(std::chrono::duration_cast<duration>(
+        std::chrono::steady_clock::now().time_since_epoch()));
+#else
+    timespec ts;
+    auto ret = clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
+    if (ret != 0) {
+      detail::throw_coarse_steady_clock_now_exn();
+    }
+    return time_point(std::chrono::duration_cast<duration>(
+        std::chrono::seconds(ts.tv_sec) +
+        std::chrono::nanoseconds(ts.tv_nsec)));
+#endif
+  }
+};
+} // namespace chrono
+} // namespace folly