id:Cryolite:20040820#p1において&fという式に型が存在しないことはすでに指摘しました.
このことは&fという式を汎用関数のパラメータとして直接に用いることが出来ないことを意味します.
template<class FP> void g(FP fp) { std::cout << fp(0) << std::endl; } g(&f); // コンパイルエラー!FPの型が決定できない!
上のように汎用関数のパラメータとしてオーバーロードされた関数へのポインタを代入したいという場面は,例えばSTLのアルゴリズムのコールバック,あるいはboost::lambda::bind(boost::bind)のパラメータなど,比較的多く見受けられます.このような場合,いったんキャストを通して型の曖昧性を排除してからパラメータとするのが常套手段となっています.
g(static_cast<int (*)(int)>(&f));
このようなキャストが煩雑であるという背景から生まれたのが
http://lists.boost.org/MailArchives/boost/msg69451.php
の議論でした.