模板化Sum(Args ...)可变参数函数不能编译

我使用静态结构成员技巧强制执行第二遍编译,但仍然出现错误:

struct S
{
    template <typename T>
    static T Sum(T t) {
        return t;
    }

    template <typename T, typename ... Rest>
    static auto Sum(T t, Rest... rest) -> decltype(t + Sum(rest...) )
    {
        return t + Sum(rest...);
    }
};

int main()
{
    auto x = S::Sum(1,2,3,4,5);
}

main.cpp:17:14:没有用于调用'Sum'的匹配函数


即使使用clang 4.0编译失败。

我设法使用decltype(auto)来编译它(只有auto会起作用),而不是显式尾部返回类型。

struct S
{
    template <typename T>
    static T Sum(T t) {
        return t;
    }

    template <typename T, typename ... Rest>
    static decltype(auto) Sum(T t, Rest... rest) 
    {
        return t + Sum(rest...);
    }
};

我认为编译器不能推导出类型,因为扣除只依赖于递归返回语句。

更多信息在这里

链接地址: http://www.djcxy.com/p/96967.html

上一篇: Templated Sum(Args...) variadic function doesn't compile

下一篇: Azure AD B2C integrating with corporate (Azure?) AD accounts