提问者:小点点

类模板参数推断失败导致替换失败


我有一个简单的程序,我试图用它来测试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;
}

非常感谢。


共1个答案

匿名用户

Clang5和6以及GCC7和8可以毫无问题地编译代码。因此,您使用的编译器没有正确实现演绎指南,或者库没有为std::list