Вы всегда можете поместить константу, определяемую компиляцией, в качестве аргументов шаблона. Итак, вот что будет:
template <typename T, typename R, R T::* member>
R& SetVal(T& t, const R& value)
{
t.*member = value;
return t.*member;
}
struct A
{
int a;
};
int main()
{
A a;
SetVal<A,int,&A::a>(a, 10);
return 0;
}