On Thu, 2015-12-03 at 15:34 -0800, Andrew Morton wrote: > I've been fiddling with a BUILD_BUG_ON which works outside functions > using gcc's __COUNTER__ - something like > > #define BBO(expr) typedef char __bbo##__COUNTER__[1-2*(!!expr)]
nit: you need another parenthesis around expr > BBO(1 == 1); > BBO(2 == 2); > > but that comes out as > > typedef char __bbo__COUNTER__[1-2*(!!1 == 1)]; > typedef char __bbo__COUNTER__[1-2*(!!2 == 2)]; > > instead of > > typedef char __bbo0[1-2*(!!1 == 1)]; > typedef char __bbo1[1-2*(!!2 == 2)]; > > There's some trick here but I've forgotten what it is. I believe it's something like: #define __stringify_2(a, b) a##b #define __stringify2(a, b) __stringify_2(a, b) #define BBO(expr) typedef char __stringify2(bbo, __COUNTER__)[1 - 2*(!!(expr))] -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/