Можно ли получить возвращаемый тип функции из функции?

Можно ли получить возвращаемый тип функции простым способом внутри функции?

Например, учитывая:

template <typename P>
static inline auto foo(P p) -> typename std::remove_reference<decltype(*p)>::type {
    typename std::remove_reference<decltype(*p)>::type f{};  // <-- here

    ...
}

В С++ 11 я могу ссылаться на большой неприятный возвращаемый тип foo, внутри самого foo, не повторяя его, на строке, обозначенной //<-- here?

Ответ 1

Вызовите функцию с помощью типа decltype.

decltype(foo(p)) f{};