我有一个std::set允许从迭代器范围中扣除。#include#includeintmain(){std::sets1={1,2,3,4};std::sets2(s1.begin(),s1.end());}以上程序failedtocompile在GCC中。为什么这里std::set推演失败? 最佳答案 只需使用当前的GCC版本(此时为8.0.0)即可构建。std::set的模板推导指南似乎没有在旧GCC版本的stdlib中实现。 关于c++-为什么GCC中的std::set扣除失败?,
我有一个std::set允许从迭代器范围中扣除。#include#includeintmain(){std::sets1={1,2,3,4};std::sets2(s1.begin(),s1.end());}以上程序failedtocompile在GCC中。为什么这里std::set推演失败? 最佳答案 只需使用当前的GCC版本(此时为8.0.0)即可构建。std::set的模板推导指南似乎没有在旧GCC版本的stdlib中实现。 关于c++-为什么GCC中的std::set扣除失败?,
考虑以下MCVEstructA{};templatevoidtest(T,T){}templateclassWrapper{usingtype=typenameT::type;};templatevoidtest(Wrapper,Wrapper){}intmain(){Aa,b;test(a,b);//workstest(a,b);//doesn'tworkreturn0;}这里test(a,b);作品和test(a,b);失败::11:30:error:notypenamed'type'in'A'usingtype=typenameT::type;~~~~~~~~~~~~^~~~:2
考虑以下MCVEstructA{};templatevoidtest(T,T){}templateclassWrapper{usingtype=typenameT::type;};templatevoidtest(Wrapper,Wrapper){}intmain(){Aa,b;test(a,b);//workstest(a,b);//doesn'tworkreturn0;}这里test(a,b);作品和test(a,b);失败::11:30:error:notypenamed'type'in'A'usingtype=typenameT::type;~~~~~~~~~~~~^~~~:2
templateclassA{public:A(Tb):a(b){}private:Ta;};Aobject(12);//Whydoesitgiveanerror?为什么不能从参数12自动推导出类型T? 最佳答案 Templateargumentdeduction仅适用于函数和成员函数模板,但不适用于类模板。所以你的代码格式错误。您需要明确提供模板参数。Aobject(12);//fine 关于c++-类模板中没有扣除,我们在StackOverflow上找到一个类似的问题:
这是一个关于elementsSize()成员函数做什么的问题,关于自动返回类型推导:#include#includetemplateclassElementVector{std::vectorelementVec_;//Otherattributes.public:ElementVector()=default;ElementVector(conststd::initializer_list&list):elementVec_(list){}autoelementsSize()//->decltype(elementVec_size()){returnelementVec_.size(
templatestructA{A(T);A(constA&);};intmain(){Ax(42);//#1Ay=x;//#2}据我了解,#1的T将使用隐式演绎指南进行演绎从第一个ctor生成。然后x将使用该ctor初始化。不过,对于#2,T将使用复制推导候选(据我了解,这是推导指南的一个特定情况)推导(然后是y将使用第二个ctor进行初始化)。为什么不能使用从copy-ctor生成的(隐式)推导指南来推导#2的T?我想我只是不明白复制扣除候选人的一般用途。 最佳答案 添加复制扣除的措辞的初稿是P0620R0,其中提到Thispa
我在GCC中使用C++14编译了以下程序。#includeusingnamespacestd;autofunc(inti);intmain(){autoret=func(5);return0;}autofunc(inti){if(i==1)returni;elsereturnfunc(i-1)+i;}但是,我收到以下错误。Infunction'intmain()':8:16:error:useof'autofunc(int)'beforedeductionof'auto'autoret=func(5);那么,我在这里错过了什么? 最佳答案
C++17标准引入了“模板推导指南”。我认为它们与此版本标准中引入的构造函数的新模板参数推导有关,但我还没有看到简单的常见问题解答式解释它们是什么以及它们的用途。什么是C++17中的模板推导指南?我们为什么(以及何时)需要它们?如何声明它们? 最佳答案 模板推导指南是与模板类关联的模式,它告诉编译器如何将一组构造函数参数(及其类型)转换为类的模板参数。最简单的例子是std::vector及其采用迭代器对的构造函数。templatevoidfunc(Iteratorfirst,Iteratorlast){vectorv(first,l
对不起,这个问题的标题太复杂了;我试图描述我为这个问题构建的最小SSCCE。我有以下代码:#includenamespacefizz{templateclassbar{public:templatefriendautofoo(constbar&);private:inti=123;};templateautofoo(constbar&b){returnb.i;}}intmain(){std::cout(fizz::bar{});}此代码compileswithGCC5.2和doesn'twithClang3.7:main.cpp:19:18:error:'i'isaprivatemem