http://d.hatena.ne.jp/gintenlabo/20110108/1294485577#c で、 #include <utility> template<class F, F f> class il_ptr_fun; template<class R, class... Args, R (*pf)(Args...)> struct il_ptr_fun<R (*)(Args...), pf> { typedef R result_type; R operator()( Args... args ) const { return (*pf)( std::forward<Args>(args)... ); } }; この operator() で使われている std::forward の意味が分からない、という指摘が有ったので、 コメントでも書きましたが、改めて解説します。