Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Weird compile error regarding vector and tuple [duplicate]

The code below compiles fine with G++ 4.7.2:

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

With clang++ 3.2, however, the following error is produced:

error: array initializer must be an initializer list.

If I remove the float type from the tuple declaration, the error disappears. Is the above tuple declaration valid?

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

like image 264
user2023370 Avatar asked Feb 10 '13 23:02

user2023370


1 Answers

I don't think there is anything in the Standard that forbids your declaration. However, you will run into problems as soon as you try to initialise, copy, move or assign your tuples, because for these operations, all member types of the tuple must be able to be used as initialisers, copy-constructible, copy-assignable and move-assignable, respectively (§20.4.2.1). None of this is the case for arrays.

You will be better off using std::array instead of C-style arrays:

#include <tuple>
#include <array>
std::tuple<float,std::array<int,2> > x;
like image 117
jogojapan Avatar answered Oct 20 '22 03:10

jogojapan