C++03だと関数ポインタの型に名前を付けるのにtypedefを使用していましたが
typedef double (*analysis_fp)(const vector<Student_info>&);
型名analysis_fpが真ん中にあるのでとてもわかりにくいです。
C++0xのalias declarationでは型の別名をusingと=を使用して書くことができるので以下のように書けます。
using analysis_fp = double (*)(const vector<Student_info>&);
こっちの方がわかりやすいので、C++0xではtypedefよりもusingを使うことをオススメします。
N1489 Templates aliases for C++