0

I have a line that looks as follows:

F::enable<sizeof(value_type), offset>(index);

I get the following compiler error (GCC 6.3.1):

error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘long unsigned int’ to binary ‘operator<’

Obviously, the left angle bracket is being interpreted as the less than operator, instead of the start of a template parameter list. F is a template parameter (class F) which I expect to contain a static member function with the signature:

template <GLsizei stride, const GLvoid* offset>
static void enable(GLuint index);

I've tried liberally inserting whitespaces, looked into typedeffing the function, looked into moving to a regular function (not possible due to inheritance things). I have commented out the line to see if something above was causing the problem, no dice. Is there any way of explaining to the compiler that I don't want to compare a function and a size_t, I want to call a particular specialization of static member function in a class?

Surma
  • 59
  • 1
  • 6

1 Answers1

5

Use the template keyword to disambiguate the situation:

F::template enable<sizeof(value_type), offset>(index);

live wandbox example

Vittorio Romeo
  • 90,666
  • 33
  • 258
  • 416