【发布时间】:2012-07-13 12:45:40
【问题描述】:
#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;
}
请解释为什么std::result_of<f(int)>::type x;无效...
cppreference 说“(std::result_of) 在编译类型推导出函数调用表达式的返回类型。”。
有什么问题?
【问题讨论】:
-
解决方法是使用这个
std::result_of<decltype(&f)(int)>::type x;。如果您想更深入地了解,请查看此问题stackoverflow.com/q/2763824/893693