BOOST_PP_BOOL が 256 までにょろ
プリプロセッサの常套手段としてルックアップテーブル的な実装で何でもこなしちゃうってのはまあ分かるんですが 有限なのはちょいと困るので 0 false !n true になるようなものを考えてみました
力技ならこんな感じ
#define BOOL(x) BOOL ## x #define BOOL0 0 #define BOOL1 1 // #define BOOLx 1
マクロ定義がマッチすればカンマを増やして 2 個目の引数で答えを返すようにしてやります
#define BOOL(x) BOOL1_(JOIN2(BOOL0_, x), 1, -1) #define BOOL0_0 -1, 0 #define BOOL1_(...) EXPAND(BOOL2_(__VA_ARGS__)) #define BOOL2_(x, y, ...) y #define JOIN2(x, y) JOIN2_(x, y) #define JOIN2_(x, y) x ## y #define EXPAND(...) EXPAND_(__VA_ARGS__) #define EXPAND_(...) __VA_ARGS__
負の数はたぶんマクロでがんばれないのでまあこんな感じなところですかね~
参考 http://stackoverflow.com/questions/319328/writing-a-while-loop-in-the-c-preprocessor