1

据我了解,result_of_t应该是一种类型,它将在表达式的评估结束时。decltype(&foo)在下面的代码中产生了类型int (*)(int),但是(int)外面的decltype呢?

#include <type_traits>

int foo(int) {
    return 0xdeadbeef;
}

int main()
{
    using T = std::result_of_t<decltype(&foo)(int)>;
    T t;
    return 0;
}
4

1 回答 1

2

但是 decltype 之外的 (int) 是什么?

它让我们感到困惑。std::result_of以“可爱”的方式定义。它专门用于F(Args...). F函子类型在哪里,而Args...提供给它的参数在哪里。

在您的情况下, (int)是调用的参数。

这以及该定义的某些其他怪癖是为什么std::result_of在 C++17 中被弃用并替换为std::invoke_result.

于 2019-12-02T09:06:29.490 回答