templateとtypeidに関連する質問です。

A + B - D →  A - B + D
  ` C - E         ` E
同じ機能を持つが引数の型が異なる2つの関数(左側のB, C)を
1つに(右側のB)まとめたいのです。

http://codepad.org/rc48PS6D
という形では、うまくいくのですが、
下記のように別の関数へ処理を渡すとコンパイルが通りません。
http://codepad.org/IqJI4gVf

実際には、この別の関数(右側のB)をstd::sortとするつもりでいます。
DとEはsortに渡す型毎のプレディケートとするつもりです。

以上よろしくお願い致します。