C++ 安置U-back和VC++;挫败

C++ 安置U-back和VC++;挫败,c++,visual-c++,c++11,vector,stl,C++,Visual C++,C++11,Vector,Stl,我正在使用Visual Studio 2012,尝试使用默认编译器和Nov CTP编译器,下面显示了我的问题: struct doesCompile { int mA, mB, mC, mD, mE; doesCompile(int a, int b, int c, int d, int e) : mA(a), mB(b), mC(c), mD(d), mE(e) { } }; struct doesNotCompile { int mA, mB,

我正在使用Visual Studio 2012,尝试使用默认编译器和Nov CTP编译器,下面显示了我的问题:

struct doesCompile
{
    int mA, mB, mC, mD, mE;

    doesCompile(int a, int b, int c, int d, int e) : mA(a), mB(b), mC(c), mD(d), mE(e)
    { 
    }
};

struct doesNotCompile
{
    int mA, mB, mC, mD, mE, mF;

    doesNotCompile(int a, int b, int c, int d, int e, int f) : mA(a), mB(b), mC(c), mD(d), mE(e), mF(f)
    { 
    }
};


int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<doesCompile> goodVec;
    goodVec.emplace_back(1, 2, 3, 4, 5);

    std::vector<doesNotCompile> badVec;
    badVec.emplace_back(1, 2, 3, 4, 5, 6);  //  error C2660: 'std::vector<_Ty>::emplace_back' : function does not take 6 arguments

    return 0;
}
struct-doesCompile
{
国际文学硕士、医学硕士、医学硕士、医学硕士;
doesCompile(inta,intb,intc,intd,inte):mA(a),mB(b),mC(c),mD(d),mE(e)
{ 
}
};
结构不可编译
{
硕士、硕士、硕士、硕士、硕士、硕士、硕士、硕士、硕士;
doesNotCompile(inta,intb,intc,intd,inte,intf):mA(a),mB(b),mC(c),mD(d),mE(e),mF(f)
{ 
}
};
int _tmain(int argc,_TCHAR*argv[]
{
std::矢量goodVec;
goodVec.安置(1,2,3,4,5);
std::载体badVec;
badVec.emplace_back(1,2,3,4,5,6);//错误C2660:'std::vector::emplace_back':函数不接受6个参数
返回0;
}
到底为什么看起来emplace_back最多有5个参数??他们甚至说这需要大量的论据


这有什么方法,使用VS2012?

< P>这是由前面的Visual C++编译器架构所造成的限制。未来版本的VC++将取消这一限制,允许使用真正的可变模板

目前,您可以通过在代码中任何包含之前添加以下内容,静态提高人造变量模板的最大限制:

#define _VARIADIC_MAX 6

这将以降低编译速度为代价将限制设置为6而不是5(最大可能值为10)。

VS2012 11月CTP编译器支持可变模板,但其标准库尚未在该版本中更新。应在VS2013RC中固定。强烈建议升级,因为即使是11月份的CTP也包含很多bug。如果不可能,请使用Konrad Rudolph提到的宏。

VS2012不支持可变模板。VS2012 CTP支持可变模板。理论上。