Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 临时对象的模板参数推导在Clang 6中中断_C++_Templates_Clang_C++17_Clang++ - Fatal编程技术网

C++ 临时对象的模板参数推导在Clang 6中中断

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

对于临时对象,模板参数推断似乎在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(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版本时升级到该版本