我有一个简单的程序,我试图用它来测试C17的类模板参数推断。
#include <iostream>
#include <list>
int main(int argc, const char * argv[]) {
const char* a = "Hello";
std::list x(1, a);
return 0;
}
我想使用std::list来推断列表的类型为constchar*
。然而,当试图运行此代码时,我得到了一个错误没有可行的构造函数或演绎指南来演绎'list'
的模板参数。特别是应与此列表匹配的构造函数(大小\u类型\u n,常量值\u类型
忽略候选模板:替换失败[带有_Tp=const char*,_Alloc=std::u 1::分配器
我很好奇为什么这不起作用,而像这样的程序是完全格式良好的,std::pair
能够轻松推断参数:
#include <iostream>
#include <list>
int main(int argc, const char * argv[]) {
const char* a = "Hello";
std::pair x(1, a);
return 0;
}
非常感谢。
Clang5和6以及GCC7和8可以毫无问题地编译代码。因此,您使用的编译器没有正确实现演绎指南,或者库没有为std::list