函数模板返回类型可以递归依赖于相同的函数模板返回类型吗?

时间:2016-02-22 12:38:41

标签: c++ templates c++11 clang

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; ^

0 个答案:

没有答案