https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118478
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> --- Same Issue with C++ and the copy constructor. It seems as, technically, there are two new copies + assignments with !$omp target firstprivate(x) [Cf. OpenMP Spec Pull Req. 4435] - Namely: one when creating the implicit task on the host, one on the device environment. Implementation wise, we could call it on the current device - and then copy it over to the wise, if a defined/user-copy constructor. If there is not, we can directly copy it to the device.