Diferencia entre std :: result_of y decltype

Tengo algunos problemas para comprender la necesidad de std::result_ofC ++ 0x. Si he entendido bien, result_ofse usa para obtener el tipo resultante de invocar un objeto de función con ciertos tipos de parámetros. Por ejemplo: template <typename F, typename Arg> typename