为什么在期望类型时无法隐式添加decltype表达式?
在C++14编译器中,将能够根据返回表达式推断函数的返回类型。为什么不能将其扩展到任何“表达式->类型”转换?
对于declval也是如此,为什么我必须写:
template <class X, class Y, class Z>
auto foo(X x, Y y, Z z){
std::vector<decltype(x+y*z)> values; // valid in c++11/c++14
//std::vector<x+y*z> values; // invalid
values.push_back(x+y*z);
return values; // type deduced from expression - OK
}
在C++14编译器中,将能够根据返回表达式推断函数的返回类型。为什么不能将其扩展到任何“表达式->类型”转换?
对于declval也是如此,为什么我必须写:
std::vector<decltype(declval<X>() + declval<Y>() * declval<Z>())> values;
改为:
std::vector<X+Y*Z> values;