我不明白FCD第148页示例的最后一行(§7.6.1.2/ 4): const int&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) x4 = x3; // type is const double& 为什么括号在这里有所作为? 它不应该简单地像上面那样是double吗?
我想写一个简单的加法器(笑),加起来每个参数,并返回与适当types的总和。 目前,我有这样的: #include <iostream> using namespace std; template <class T> T sum(const T& in) { return in; } template <class T, class… P> auto sum(const T& t, const P&… p) -> decltype(t + sum(p…)) { return t + sum(p…); } int main() { cout << sum(5, 10.0, 22.2) << endl; } 在GCC 4.5.1上,这对于2个参数来说似乎工作得很好,例如sum(2,5.5)返回7.5。 然而,比这更多的争论,我得到错误sum()是根本没有定义。 如果我这样宣布sum(): […]