簡體   English   中英

模板化Sum(Args ...)可變參數函數無法編譯

[英]Templated Sum(Args…) variadic function doesn't compile

我使用靜態struct member技巧來強制執行第二次傳遞編譯,但仍然出現錯誤:

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...);
    }
};

我認為編譯器無法推斷類型,因為推導僅取決於遞歸返回語句。

更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM