当给定6个整数的元组时,std :: get失败

时间:2013-09-21 15:02:33

标签: c++ get tuples

我正在使用std :: get一个元组。当给出5个整数的元组时,它运行良好:

typedef std::tuple<int, int, int, int, int> int5Tuple;

std::get<1>(int5Tuple(1, 2, 3, 4, 5));

然而,在6个整数的元组中,它失败了:

typedef std::tuple<int, int, int, int, int, int> int6Tuple;

std::get<1>(int6Tuple(1, 2, 3, 4, 5, 6));

给出此错误:错误C2243:'type cast':从'std :: tuple&lt;,_ V0_t,_V1_t,_V2_t,_V3_t,_V4_t&gt;转换*'to'std :: tuple&lt;,_ V0_t,_V1_t,_V2_t,_V3_t&gt; &安培;&安培;”存在,但无法访问。

在寻找解决方案时,它似乎暗示它与访问保护有关,但我不认为这将是解决方案的途径。

我得到的intellisense错误是没有std :: get的实例与参数列表匹配。

2 个答案:

答案 0 :(得分:4)

在VS 2013之前,Visual Studio并不真正支持可变参数模板,这意味着他们使用宏生成的“重载”来支持通常使用此语言功能实现的C ++ 11 STL功能。默认情况下,这些重载最多支持五个(模板)参数。但是,以更高的编译时间为代价,可以使用_VARIADIC_MAX define。

进行配置
  

您可以在5到10之间定义_VARIADIC_MAX项目范围(默认为5)。

有关详细信息,请参阅C++11 Features in Visual C++ 11 VCBlog条目中的“虚假变量”部分。

答案 1 :(得分:0)

Visual Studio没有完全支持C ++ 11,因此它使用有限数量的模板参数(在本例中为5)作为缺少可变参数模板支持的补偿。我的假设是任何大于5的模板参数都不会编译。