MSVC和GCC接受以下代码,但clang拒绝它,谁是谁?
template<typename A>
struct S {
static auto f()->int {
return 1;
}
template<typename T, typename...Ts>
static auto f(T, Ts...args)->decltype(f(args...)) {
return{};
}
};
using d = decltype(S<int>::f(1,2,3,4));
Clang错误是:
1&gt; sortTest2.cpp(113,20):错误:没有匹配函数来调用&#39; f&#39; 1 GT;使用d = decltype(S :: f(1,2,3,4)); 1 GT;
^ ~~~~~~~~ 1&gt; sortTest2.cpp(109,14):注意:候选模板 忽略:替换失败[使用T = int,Ts =]: 函数调用的参数太多,预期为0,有3 1&gt;
static auto f(T,Ts ... args) - &gt; decltype(f(args ...)){1&gt;
^ ~~~~ 1&gt; sortTest2.cpp(105,14):注意: 候选函数不可行:需要0个参数,但是4个 提供1> static auto f() - &gt; int {1&gt; ^