为什么不提升元组运算符==和<<编译?

时间:2017-04-30 02:46:13

标签: c++ boost

This boost::tuples doc page说:

  

元组将运算符==,!=,<,>,< =和> =减少到相应的基本运算符。这意味着,如果在两个元组的所有元素之间定义了这些运算符中的任何一个,那么在元组之间也定义了相同的运算符。

它还说:

  

全球运营商<<已经为std :: ostream重载,以便通过递归调用operator<<来输出元组。对于每个元素。

这里给出的示例代码看起来应该可以轻松使用这些功能。

那么为什么这段代码无法编译?

#include <iostream>
#include <boost/tuple/tuple.hpp>

int main()
{
    using namespace std;
    using namespace boost;
    using namespace boost::tuples;

    tuple<int, int> t1(0, 0);
    tuple<int, int> t2(0, 0);
    cerr << "t1: " << t1 << endl;
    cerr << "t2: " << t2 << endl;
    if (t1 == t2) { cerr << "equal\n"; } else { cerr << "notequal\n"; }
    return 0;
}

g++ -Wall -Wextra -Werror tuple.cxx -o tuple我得到:

tuple.cxx: In function ‘int main()’:
tuple.cxx:12:17: error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘boost::tuples::tuple<int, int>’)
  cerr << "t1: " << t1 << endl;
                 ^

和雪崩相关的错误。

在ubuntu 14.04和16.04上,libboost-1.54和1.58,g ++ - 4.8.4和5.4.0的行为相似。

1 个答案:

答案 0 :(得分:3)

您关联的网页也说

  

要使用该库,只需包含:

#include "boost/tuple/tuple.hpp"
     

比较运算符可以包括在:

#include "boost/tuple/tuple_comparison.hpp"
     

使用元组输入和输出运算符

#include "boost/tuple/tuple_io.hpp"