Knowledge Base
Search
New article
Authentication is disabled (development mode).
Edit article
Title
Tags
Content
<pre><code class="language-cpp"> #define glue(a, b) a ## b #define concat(a, b) glue(a, b) // This is needed to expand `a` and `b` #define shift1(a) a #define shift2(a, b) a << b #define shift3(a, b, c) a << shift2(b, c) #define shift4(a, b, c, d) a << shift3(b, c, d) #define shift5(a, b, c, d, e) a << shift4(b, c, d, e) #define shift6(a, b, c, d, e, f) a << shift5(b, c, d, e, f) #define shift7(a, b, c, d, e, f, g) a << shift6(b, c, d, e, f, g) #define shift8(a, b, c, d, e, f, g, h) a << shift7(b, c, d, e, f, g, h) #define _8th(a, b, c, d, e, f, g, h, ...) h #define count(...) _8th(x, ## __VA_ARGS__, 6, 5, 4, 3, 2, 1, 0) #define chain(a, b, ...) a << concat(shift, count(b, ## __VA_ARGS__))(b, ## __VA_ARGS__) int main(int argc, char **argv) { // 0 << 1; chain(0, 1); chain(0, 1, 2); chain(0, 1, 2, 3); chain(0, 1, 2, 3, 4); chain(0, 1, 2, 3, 4, 5); chain(0, 1, 2, 3, 4, 5, 6); chain(0, 1, 2, 3, 4, 5, 6, 7); // 0 << 1 << 2 << 3 << 4 << 5 << 6 << 7; return 0; }</code></pre>
Save
Cancel