Lin*_*gxi 8 c++ language-lawyer name-lookup c++11 trailing-return-type
正如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';
}
Run Code Online (Sandbox Code Playgroud)
虽然这个解决方案适用于GCC,但它根本没有解决问题.所以,我想知道哪一个是正确的.
我想出的最佳解决方法是:
#include <iostream>
struct S {
template <typename T>
static T sum(T t){
return t;
}
template <typename S, typename T>
static auto sum(S s, T t) -> decltype(s + t) {
return s + t;
}
template <typename S, typename T, typename ...U>
static auto sum(S s, T t, U... u) -> decltype(s + t) {
return s + sum(t, u...);
}
};
int main() {
std::cout << S::sum(1, 1.5, 2) << '\n';
}
Run Code Online (Sandbox Code Playgroud)
clang 似乎在解决 decltype 指令中的递归函数/方法时存在问题......
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |