https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115911

            Bug ID: 115911
           Summary: [OpenMP]gcc rejects valid user defined openmp
                    reduction in template class with default argument
           Product: gcc
           Version: 13.2.0
            Status: UNCONFIRMED
          Keywords: openmp, rejects-valid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rush102333 at gmail dot com
  Target Milestone: ---

The following code is rejected by gcc-13.2:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$g++ -fsyntax-only -fopenmp tst.cpp

template<typename T,int=0> struct A
{
  #pragma omp declare reduction (add : T : omp_out += omp_in) initializer
(omp_priv = 0)
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The compiler outputs the following error message:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:3:44: error: default argument for template parameter for class
enclosing 'static void A<T, <anonymous> >::omp declare reduction add(T&)'
    3 |   #pragma omp declare reduction (add : T : omp_out += omp_in)
initializer (omp_priv = 0)
      |                                            ^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



Removing class A's default template argument "int=0" can eliminate the
diagnostic. Clang and icc always accept the code.

https://godbolt.org/z/3z36M8chv

Reply via email to