C/C++の可変長引数マクロで引数の数でオーバーロードしたい

#define SELECTER(_1, _2, SELECT, ...) SELECT
#define FOO(...) SELECTER(__VA_ARGS__, NYAN, WAN) (__VA_ARGS__)

FOO(neko)       // expanded to `NYAN (neko)`
FOO(inu, dog)   // expanded to `WAN (inu, dog)`

参考

c - Overloading Macro on Number of Arguments - Stack Overflow

c++ - Can macros be overloaded by number of arguments? - Stack Overflow