Différence entre std :: result_of et decltype

J'ai du mal à comprendre la nécessité de std::result_ofC ++ 0x. Si j'ai bien compris, result_ofest utilisé pour obtenir le type résultant de l'appel d'un objet fonction avec certains types de paramètres. Par exemple: template <typename F, typename Arg> typename