正如 ecatmur 所指出的,这个问题在这里已经有了答案。
这个问题显然不是使用带有可变参数模板函数的 decltype 的尾随返回类型的重复。它实际上试图提出一个更简单的解决方案来解决该线程中的问题。问题是这个解决方案根据标准是否正确,因为 GCC 和 clang 不同意。仔细阅读这个问题,你就会意识到这一点。
这个问题是受这个启发的。我试图提出一个比已经提供的更简单的解决方案,并最终得到这个:
#include <iostream>
struct S {
template <typename T>
static T sum(T t){
return t;
}
template <typename T, typename ...U>
static auto sum(T t, U... u) -> decltype(t + sum(u...)) {
return t + sum(u...);
}
};
int main() {
std::cout << S::sum(1, 1.5, 2) << '\n';
}
虽然此解决方案适用于 GCC,但它根本无法解决 clang 的问题。所以,我想知道哪个是正确的。