std :: result_of função simples

#include <iostream>
#include <type_traits>

double f(int i)
{
        return i+0.1;
}

struct F
{
        public:
        double operator ()(int i) { return i+0.1; }
};

int
main(int, char**)
{
        std::result_of<F(int)>::type x;     // ok
        // std::result_of<f(int)>::type x; // error: template argument 1 is invalid
        x = 0.1;
        std::cerr << x << std::endl;
}

Por favor, explique por questd::result_of<f(int)>::type x; é inválido...

cppreference diz "(std::result_of) Deduz o tipo de retorno de uma expressão de chamada de função no tipo de compilação.

qual é o problema?

questionAnswers(1)

yourAnswerToTheQuestion