I have

```
template <void (*T)(Entity *), typename Caller>
class Updater 
{
public:
    Updater(Caller c):m_caller(c){}
    void process(Entity * e)
    {
        (m_caller->*T)(e);              //Is this right?
    }
private:
    Caller m_caller;
};

```

I understand I can instantiate it like

```
Foo f;
Updater<&Foo::Bar> updater(&f);

```

assuming that `Foo` has 

```
void Foo::Bar(Entity *e);

```

but what if it has desired method tempated? Like this

```
template <typename T>
void Bar(T t);

```

how shoult I instanciate it? Like this:?

```
Foo f;
Updater<&Foo::Bar<Entity *>> updater(&f);

```

When I do this in my real code, I get 

`invalid template argument for ..., expected compile-time constant expression`

So 2 questions:

1, is `(m_caller->*T)(e);` correct? If it is not, how shout i call it?

2, how can I instantiate it?