Why do I get an error trying to call a template member function with an explicit type parameter?

前端 未结 1 476
别那么骄傲
别那么骄傲 2021-01-30 03:20

I don\'t get it, it seems to me that the call to f is completely unambiguous, but it fails to compile with expected primary-expression before ‘int’. If

1条回答
  •  [愿得一人]
    2021-01-30 03:44

    This is due to a really obscure provision of the standard in which if you have a template that tries to access a template function in an object whose type depends on a template argument, you have to use the template keyword in a weird way:

    this->template f();
    

    This is similar to the weirdness with typename that comes up with dependent types, except as applied to functions. In particular, if you leave out the template keyword, there's a parsing ambiguity between

    this->f()
    

    (what you intended), and

    ((this->f) < int) > ()
    

    which makes no sense (hence your error). The use of the keyword template here disambiguates and forces the compiler to recognize that it's looking at a perfectly valid call to a templated member function rather than a garbled mass of symbols.

    Hope this helps!

    0 讨论(0)
提交回复
热议问题