[meta] Add enable_if
diff --git a/src/hb-meta.hh b/src/hb-meta.hh
index 6285d39..62fc71a 100644
--- a/src/hb-meta.hh
+++ b/src/hb-meta.hh
@@ -30,6 +30,11 @@
#include "hb.hh"
+/*
+ * C++ Template Meta-programming.
+ */
+
+
/* Void! For when we need a expression-type of void. */
struct hb_void_t { typedef void value; };
@@ -37,4 +42,15 @@
struct hb_false_t { enum { value = false }; };
+
+template<bool B, class T = void>
+struct hb_enable_if {};
+
+template<class T>
+struct hb_enable_if<true, T> { typedef T type; };
+
+#define hb_enable_if(Cond) hb_enable_if<Code>::type* = nullptr
+#define hb_enable_if_t(Type, Cond) hb_enable_if<(Cond), Type>::type
+
+
#endif /* HB_META_HH */