fix bootstrap on osx
[folly.git] / folly / Preprocessor.h
index 800608d4afc3562569c50e048299ceca03ff7b18..525527ff7adc4b582e54127bac53233ec37303f2 100644 (file)
  * Necessarily evil preprocessor-related amenities.
  */
 
+// MSVC's preprocessor is a pain, so we have to
+// forcefully expand the VA args in some places.
+#define FB_VA_GLUE(a, b) a b
+
 /**
  * FB_ONE_OR_NONE(hello, world) expands to hello and
  * FB_ONE_OR_NONE(hello) expands to nothing. This macro is used to
  * insert or eliminate text based on the presence of another argument.
  */
-#ifdef _MSC_VER
-
-#define VA_NARGS_IMPL(_1, _2, _3, _4, _5, N, ...) N
-#define VA_NARGS(...) VA_NARGS_IMPL(X,##__VA_ARGS__, 4, 3, 2, 1, 0)
-#define VARARG_IMPL2(base, count, ...) base##count(__VA_ARGS__)
-#define VARARG_IMPL(base, count, ...) VARARG_IMPL2(base, count, __VA_ARGS__)
-#define VARARG(base, ...) VARARG_IMPL(base, VA_NARGS(__VA_ARGS__), __VA_ARGS__)
-
-#define FB_ONE_OR_NONE0() /* */
-#define FB_ONE_OR_NONE1(x) /* */
-#define FB_ONE_OR_NONE2(x, y) x
-#define FB_ONE_OR_NONE3(x, y, z) x
-#define FB_ONE_OR_NONE(...) VARARG(FB_ONE_OR_NONE, __VA_ARGS__)
-
-#else
-#define FB_ONE_OR_NONE(a, ...) FB_THIRD(a, ## __VA_ARGS__, a)
+#define FB_ONE_OR_NONE(a, ...) FB_VA_GLUE(FB_THIRD, (a, ## __VA_ARGS__, a))
 #define FB_THIRD(a, b, ...) __VA_ARGS__
-#endif
-
-// MSVC's preprocessor is a pain, so we have to
-// forcefully expand the VA args in some places.
-#define FB_VA_GLUE(a, b) a b
 
 /**
  * Helper macro that extracts the first argument out of a list of any