3

I have this template that compiles successfully with g++. When I remove a seemingly irrelevant function, it results in a syntax error.

Exhibit 1: This compiles successfully. Note that this is the only content of the file; the template is not instantiated.

template<typename T> struct aaa {
    void w() {
        T x;
        x.goo<5>();
    }
    template<float***, char> void goo() {

    } 
};

Exhibit 2: The following results in a syntax error.

template<typename T> struct aaa {
    void w() {
        T x;
        x.goo<5>();
    }
};

The error is

aoeu.cpp: In member function 'void aaa<T>::w()':
aoeu.cpp:6:18: error: expected primary-expression before ')' token
         x.goo<5>();

I tried this using GCC 4.8 and 5.2 with the same result. How does the presence of void goo influence whether the line x.goo<5>(); generates an error?

feersum
  • 658
  • 4
  • 11

0 Answers0