C ++:元组C ++ 11 / 1y的列表

时间:2015-06-05 19:41:05

标签: c++ c++11 gcc

之前的问答(here)表明,可以通过以下方式创建元组列表:

#include <vector>
#include <boost/tuple/tuple.hpp>
using namespace std;
using boost::tuple;
typedef vector< tuple<int, int> > tuple_list;

虽然在使用C ++ 98运行时没有出现错误,但C ++ 1y(Ubuntu上的GCC / GNU)给出了:

error: template argument 1 is invalid
typedef vector< tuple<int, int> > tuple_list;
                                ^
error: template argument 2 is invalid
error: invalid type in declaration before ‘;’ token
typedef vector< tuple<int, int> > tuple_list;
                                            ^

知道发生了什么事吗? (如果我可以对我想要的另一个帖子发表评论,但很棒的SO说我的声誉太低而无法发表评论!)

1 个答案:

答案 0 :(得分:7)

问题是名称冲突,您是using boost::tuple还是namespace std;,这两者都会将tuple带入全局范围,因此您最终会得到同一模板的两个定义。我不明白为什么编译器在诊断错误方面不是更明确的......

删除using boost::tuple;using namespace std;并限定相应的名称:

#include <vector>
#include <boost/tuple/tuple.hpp>
//using namespace std;
//using boost::tuple;
typedef std::vector< boost::tuple<int, int> > tuple_list;

int main()
{
    tuple_list foo;
}

我想这是为什么不建议使用using的一个主要例子;)