簡體   English   中英

Clang 6 中臨時對象的模板參數推導中斷

[英]Template Argument Deduction Broken in Clang 6 for Temporary Objects

在 Clang 6 中,臨時對象的模板參數推導似乎被破壞了。

g++ 8.1.0 編譯並正確運行示例。

Clang 6.0.0 和 6.0.2 都在帶有此消息的指示行處出錯:

error: expected unqualified-id
    Print{1,"foo"s,2};  /********** Broken in Clang **********/

所有其他線路工作正常。

無論使用-std=c++17還是-std=c++2a ,這兩種情況的行為都是相同的。

Clang c++ 狀態頁面表明模板參數推導是從 Clang 5(P0091R3、P0512R0)開始實現的。

這是一個錯誤嗎? 是否有解決方法(例如編譯器標志,而不是代碼更改)?

例子:

template<class ...Ts>
void print(Ts...ts){ (( cout << ... << ts )); }
template<class ...Ts>
struct Print {
    Print(Ts...ts){ (( cout << ... << ts )); }
};

int main(){
    Print{1,"foo"s,2}; /********** Broken in Clang **********/
    Print<int,string,int>{1,"foo"s,2};
    auto p1 = Print{1,"foo"s,2};
    Print p2{1,"foo"s,2};
    print(1,"foo"s,2);
}

這是 Clang 錯誤34091

幸運的是,它已經修復了,並且 Clang 的主干構建編譯它沒有問題

然而,據我所知,目前沒有辦法在沒有代碼更改的情況下解決這個問題,除非隨時升級到下一個 Clang 版本。

暫無
暫無

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

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