使用数组作为元组成员:有效的C ++ 11元组声明?

时间:2013-02-10 23:50:18

标签: c++ c++11 tuples clang

下面的代码可以很好地编译G ++ 4.7.2:

#include <tuple>
std::tuple<float,int[2]> x;

但是,对于clang ++ 3.2,会产生以下错误:

错误:数组初始值设定项必须是初始化列表。

如果我从元组声明中删除float类型,则错误消失。上面的元组声明是否有效?

$ CXX -std = c ++ 11 -c file.cpp

1 个答案:

答案 0 :(得分:4)

我认为标准中没有任何内容禁止您的声明。但是,一旦尝试初始化,复制,移动或分配元组,就会遇到问题,因为对于这些操作,元组的所有成员类型必须能够用作初始化器,可复制构造,可复制 - 可分配和移动可分配的(第20.4.2.1节)。数组都不是这种情况。

最好使用std::array代替C风格的数组:

#include <tuple>
#include <array>
std::tuple<float,std::array<int,2> > x;
相关问题