为什么boost :: variant不提供运算符!=

Dre*_*ann 16 c++ boost-variant

给定两个相同的boost::variant实例ab,表达( a == b )是允许的.

( a != b )似乎未定义.为什么是这样?

AFo*_*lia 12

我认为它只是没有添加到库中.Boost.Operators实际上并没有帮助,因为任何一个变体都是从boost :: operator :: equality_comparable派生的.David Pierre说你可以使用它,但你的反应也是正确的,ADL找不到新的运算符!=所以你需要一个using运算符.

我会在boost-users邮件列表中问这个问题.

编辑来自@ AFoglia的评论:

七个月后,我正在研究Boost.Variant,我偶然发现了这个遗漏名单的更好解释.

http://boost.org/Archives/boost/2006/06/105895.php

operator==要求operator==当前在变体中的实际类.同样,呼叫operator!=也应该调用operator!=该类.(因为理论上,可以定义一个类,因此a!=b不一样!(a==b).)这样就会增加另一个要求,即变量中的类具有operator!=.(关于你是否可以在邮件列表主题中做出这个假设存在争议.)

  • 七个月后,我正在研究Boost.Variant,我偶然发现了这个遗漏的更好解释http://lists.boost.org/Archives/boost/2006/06/105895.php.Operator ==为当前变体中的实际类调用operator ==.同样,调用operator!=也应该调用类的operator!=.(因为理论上,可以定义一个类,所以!= b与!(a == b)不一样.)这样就会增加另一个要求,即变量中的类有一个运算符!=.(关于你是否可以在邮件列表主题中做出这个假设存在争议.) (5认同)