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

            Bug ID: 66427
           Summary: The compiler rejects too complex variable templates
           Product: gcc
           Version: 5.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: morwenn29 at hotmail dot fr
  Target Milestone: ---

I was trying to replace structures with a single value member by variable
templates but it seems that their support still isn't complete enough to
support my use case. I couldn't find a reasonable "minimal" example, so here is
the code that triggered the error:

#include <complex>

struct plus {};
struct multiplies {};
// ...

template<typename T, typename Op>
constexpr T identity_element;

template<>
constexpr int identity_element<int, plus> = 0;

template<typename T>
constexpr std::complex<T> identity_element<std::complex<T>, plus> = {
    identity_element<T, plus>,
    identity_element<T, plus>
};


And here are the generated error messages:

main.cpp:15:23: error: expected primary-expression before ',' token

     identity_element<T, plus>,

                       ^

main.cpp:15:29: error: expected primary-expression before '>' token

     identity_element<T, plus>,

                             ^

main.cpp:15:30: error: expected primary-expression before ',' token

     identity_element<T, plus>,

                              ^

main.cpp:16:23: error: expected primary-expression before ',' token

     identity_element<T, plus>

                       ^

main.cpp:16:29: error: expected primary-expression before '>' token

     identity_element<T, plus>

                             ^

main.cpp:17:1: error: expected primary-expression before '}' token

 };

 ^

Reply via email to