元组向量和initializer_list

Nee*_*eed 27 c++ tuples initializer-list c++11

我试着用gcc4.7编译以下代码片段

vector<pair<int,char> > vp = {{1,'a'},{2,'b'}};
//For pair vector, it works like a charm.

vector<tuple<int,double,char> > vt = {{1,0.1,'a'},{2,4.2,'b'}};
Run Code Online (Sandbox Code Playgroud)

但是,对于元组的向量,编译器抱怨:

错误:从初始化列表转换为'std :: tuple'将使用显式构造函数'constexpr std :: tuple <> :: tuple(_UElements && ...)[with _UElements = {int,double,char}; =无效 _Elements = {int,double,char}]'

编译器溢出的错误信息对我来说是完全乱码,我不知道元组的构造函数是如何实现的,但我知道它们完全可以使用统一初始化(如:)tuple<int,float,char>{1,2.2,'X'},因此,我想知道问题是否存在我遇到的只是编译器的TODO或它是由C++ 11标准定义的东西.

任何回复将不胜感激!

Luc*_*ton 13

相关的std::tuple建设者是explicit.这意味着你想要做的事情是不可能的,因为你想要使用的语法是根据复制初始化(禁止调用explicit构造函数)来定义的.相反,std::tuple<int, float, char> { 1, 2.2, 'X' }使用直接初始化.std::pair确实只有非explicit构造函数.

使用直接初始化或标准元组工厂函数之一(例如std::make_tuple).