Quick post about problem which I already solved, but think that could be handy for someone else.
I have following code:
template<class T> struct Test { T val; template <class T2> void DoSomething( T2 &obj ) { obj.FindByType<int>(); } };
When compiling under Visual studio, everything is ok. But when try the same code snippet under g++, have following error:
test.cpp: In member function ‘void Test<T>::DoSomething(T2&)’: test.cpp:48: error: expected primary-expression before ‘int’ test.cpp:48: error: expected ‘;’ before ‘int’
This is because compiler doesn’t known FindByType method, because T2 is templated argument. The solution which I found is in adding keyword template before FindByType method name. So updated source code will look like this:
template<class T> struct Test { T val; template <class T2> void DoSomething( T2 &obj ) { obj.template FindByType<int>(); } };
After this update, code will be compiled correctly under both compilers.
Leave a Reply