-
Notifications
You must be signed in to change notification settings - Fork 1
/
temp.cpp
42 lines (37 loc) · 943 Bytes
/
temp.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
template <int START, int END, int STEP=1, bool VALID=(START < END)>
struct RangeCore {
template <typename Func>
static void exec(Func func) {
func(START, END);
RangeCore<START+STEP, END, STEP>::exec(func);
}
};
template <int START, int END, int STEP>
struct RangeCore<START, END, STEP, false> {
template <typename Func>
static void exec(Func func) {}
};
template <int START, int END, int STEP=1>
struct Range {
template <typename Func>
static void exec(Func func) {
RangeCore<START, END, STEP>::exec(func);
}
};
template <int END>
struct Range<0, END> {
template <typename Func>
static void exec(Func func) {
RangeCore<0, END>::exec(func);
}
};
#define STATIC_FOR(s, e) Range<(s), (e)>::exec
#include <iostream>
int main() {
int a = 0;
STATIC_FOR (0, 4) ([&](int idx, int lim) {
a += idx;
});
std::cout << a << std::endl;
return 0;
}