>> template<void(*)(int)>
>> struct A { // impl };

>You can't. A function pointer points to a >function. You can't have a
>pointer to a function template. So, at the >point when A is instantiated,
>the function pointer must be either null or >point to a function, whether
>it was generated as a result of a function >template instantiation or was
>never a template to begin with.

Yet a function pointer is compile time constant, that means we can examine its properties at compile time. And the template arguments are among these properties.
This is related to type erasure.
I think the compiler should allow a way to access the template arguments of a function pointer.
Because when we pass a function pointer generated from a function template usually we do

A<foo<T1,T2>> a;

Which is mandatory to avoid overload ambiguity. 

And at this point, we see clearly the template arguments,  and i don't see why the compiler can't see them!



Sent from my Galaxy