[cfe-dev] [OpenMP] Parameter packs

David Greene via cfe-dev cfe-dev at lists.llvm.org
Mon Oct 15 07:45:30 PDT 2018


Should this compile?

#include <tuple>

constexpr std::size_t N = 100;

double A[N];

template<typename ...Args>
void loop(Args ...args) {
#pragma omp parallel firstprivate(args...)
  for (std::size_t i = 0; i < N; ++i) {
    A[i] = (i + ... + args);
  }
}

int main(void) {
  std::apply([] (const auto & ...args) { loop(args...); },
                 std::tuple<int, double, float>(10, 2.6, 3.4));
  std::apply([] (const auto & ...args) { loop(args...); },
                 std::tuple<int, long, char, double, short>(10, 100, 'b', 2.6, 3));
  return 0;
}

clang++ errors with:

firstprivate.cpp:10:39: error: expected ',' or ')' in 'firstprivate' clause
#pragma omp parallel firstprivate(args...)
                                      ^
firstprivate.cpp:10:39: error: expected expression
2 errors generated.

g++ gives a similar error.  I was not terribly surprised by this.
However, it sure would be nice if it worked.

                      -David


More information about the cfe-dev mailing list