J'ai souvent eu cette erreur :

template<class Func, class T>
void f(Func f, T& a)
{
a.template func<decltype(f())>();
}

Je pense que c'est pour que le parser du compilateur puisse lire...