[meta] Add enable_if

This commit is contained in:
Behdad Esfahbod 2018-12-27 17:38:26 -05:00
parent e76a3cae0f
commit e32bf39766
1 changed files with 16 additions and 0 deletions

View File

@ -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_true_t { enum { value = true }; };
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 */