c++ - unable to determine the template type even it is passed in -


this question has answer here:

i have following code:

template <typename t> struct data {    struct embed    {        t t;    }; };  struct functor {   template <typename t>   void foo( typename data<t>::embed & e) {} }; template <typename t, typename f> struct caller {   f f;   template <typename t>   void invoke() {     typename data<t>::embed e;     f.foo<t>(e); //compiler error pointed line    }  }; 

then specialized template as:

 caller<int, functor> c;  c.invoke(); 

compiler error : error: expected primary-expression before '>' in f.foo<t>(e); line. seems compiler doesn't know t specified in template declaration on function.

take out explicit specified t in foo.invoke(e) line result could not deduce template parameter 't'

how fix this? (i still want keep functionality caller can have generic functor , functor's function can templated).

you using:

template <typename t> void invoke() {    typename data<t>::embed e;    f.foo<t>(e); //compiler error pointed line } 

inside caller though t 1 of parameters of caller. remove line

template <typename t> 

and use just:

void invoke() {    typename data<t>::embed e;    // f.foo<t>(e);   //compiler error pointed line    f.template foo<t>(e); // need template keyword here. } 

however, @nawaz pointed out in comment, changes semantics of invoke. if t in invoke meant different t used instantiate caller, better use different name, u.


Comments

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -