1

アンパックされた varidic テンプレート引数を受け入れる関数で遅延戻り型を使用するのに問題があります。これは Nov CTP Visual Studio ではコンパイルされません。

template <typename Function, typename ...Args>
auto invoke ( Function f, Args... args)
    -> decltype(f(args...))
{

    return f(args...);
}

int foo(int x, const char* y = "Hello") {
    cout << x << " : " << y << endl;

    return x;
};

int _tmain(int argc, TCHAR* argv[]) {

    auto v = invoke(&foo, 10, "Hello There");
    cout << v << endl;

    return 0;
}

どんな助けでも感謝します。

4

1 に答える 1

1

誰かがそれを必要とする場合に備えて。次の回避策は私にとってはうまくいきました。

template <typename F> struct freturn_type;
template <typename R, typename... A>
struct freturn_type<R (*)(A...)>
{
    typedef R type;
};


template <typename Function, typename ...Args>
typename freturn_type<Function>::type invoke ( Function f, Args... args)
    //-> decltype(f(args...))
{
    return f(args...);
};
于 2013-11-15T12:21:20.830 に答える