#ifndef HEADER
#define HEADER
void foo() {}
template <class T, int N>
T tmain(T argc) {
T b = argc, c, d, e, f, g;
static T a;
#pragma omp parallel
#pragma omp sections private(argc, b), firstprivate(c, d), lastprivate(d, f) reduction(task, - : g) nowait allocate(d)
{
foo();
}
return T();
}
int main(int argc, char **argv) {
int b = argc, c, d, e, f, g;
static int a;
#pragma omp parallel
#pragma omp sections allocate(c) private(argc, b), firstprivate(argv, c), lastprivate(d, f) reduction(+ : g) nowait
{
#pragma omp section
foo();
#pragma omp section
foo();
}
return (tmain<int, 5>(argc) + tmain<char, 1>(argv[0][0]));
}
#endif