C++ 临时对象的模板参数推导在Clang 6中中断
对于临时对象,模板参数推断似乎在Clang 6中被破坏 g++8.1.0正确编译并运行示例 Clang 6.0.0和6.0.2在显示此消息的行中均出现错误:C++ 临时对象的模板参数推导在Clang 6中中断,c++,templates,clang,c++17,clang++,C++,Templates,Clang,C++17,Clang++,对于临时对象,模板参数推断似乎在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 5(P009
error: expected unqualified-id
Print{1,"foo"s,2}; /********** Broken in Clang **********/
所有其他线路工作正常
无论是使用-std=c++17
还是-std=c++2a
,这两种情况下的行为都是相同的
指示模板参数推断在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);
}
模板
无效打印(Ts…Ts){(cout这是一个叮当的错误
幸运的是,它已经修好了,而且树干的构造叮当作响
然而,据我所知,如果不进行代码更改,目前无法解决这个问题,除非在出现下一个Clang版本时升级到该版本