gpt4 book ai didi

c++ - 临时对象的 Clang 6 中的模板参数推导被破坏

转载 作者:可可西里 更新时间:2023-11-01 18:29:01 25 4
gpt4 key购买 nike

在 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,两种情况下的行为都是相同的。

The Clang c++ Status Page表示从 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 的主干构建 compiles this without issue .

然而,据我所知,目前没有办法在不更改代码的情况下解决这个问题,除非在发布时升级到下一个 Clang 版本。

关于c++ - 临时对象的 Clang 6 中的模板参数推导被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50440831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com