web-dev-qa-db-ja.com

関数の戻り値の型は、関数内から取得できますか?

関数の戻り値の型は、関数内で簡単な方法で取得できますか?

たとえば、次の場合:

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

    ...
}

C++ 11では、// <-- hereとマークされた行で、foo自体の内部で、fooの大きな厄介な戻り値型を繰り返し使用せずに参照できますか?

42
BeeOnRope

decltypeを使用して関数を呼び出します。

decltype(foo(p)) f{};
50
Rakete1111