+/**
+ * Maybe_unused indicates that a function, variable or parameter might or
+ * might not be used, e.g.
+ *
+ * int foo(FOLLY_MAYBE_UNUSED int x) {
+ * #ifdef USE_X
+ * return x;
+ * #else
+ * return 0;
+ * #endif
+ * }
+ */
+#if FOLLY_HAS_CPP_ATTRIBUTE(maybe_unused)
+#define FOLLY_MAYBE_UNUSED [[maybe_unused]]
+#elif FOLLY_HAS_ATTRIBUTE(__unused__) || __GNUC__
+#define FOLLY_MAYBE_UNUSED __attribute__((__unused__))
+#else
+#define FOLLY_MAYBE_UNUSED
+#endif
+
+/**
+ * Nullable indicates that a return value or a parameter may be a `nullptr`,
+ * e.g.
+ *
+ * int* FOLLY_NULLABLE foo(int* a, int* FOLLY_NULLABLE b) {
+ * if (*a > 0) { // safe dereference
+ * return nullptr;
+ * }
+ * if (*b < 0) { // unsafe dereference
+ * return *a;
+ * }
+ * if (b != nullptr && *b == 1) { // safe checked dereference
+ * return new int(1);
+ * }
+ * return nullptr;
+ * }
+ */
+#if FOLLY_HAS_EXTENSION(nullability)
+#define FOLLY_NULLABLE _Nullable
+#define FOLLY_NONNULL _Nonnull
+#else
+#define FOLLY_NULLABLE
+#define FOLLY_NONNULL
+#endif
+
+/**
+ * "Cold" indicates to the compiler that a function is only expected to be
+ * called from unlikely code paths. It can affect decisions made by the
+ * optimizer both when processing the function body and when analyzing
+ * call-sites.
+ */
+#if __GNUC__
+#define FOLLY_COLD __attribute__((__cold__))
+#else
+#define FOLLY_COLD
+#endif