>>99 さん、ありがとうございます。

メンバ関数版をテンプレートで作り、非メンバ関数版をオーバーロードしました。

template<typename T>
void g(double &a, double b, T t, double (T::*f)(double d) ) { a=(t.*f)(b); }

g(z, 3.0, c, C::m); // (#2a)

という感じです。
ひとまずこれで動くようになりました。


インスタンス c とメンバ関数 C::m を別々の引数で与える仕様にしましたが、
これを単一の引数で与えることは不可能でしょうか?