[英]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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.