Dre*_*ann 16 c++ boost-variant
给定两个相同的boost::variant实例a和b,表达( 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!=.(关于你是否可以在邮件列表主题中做出这个假设存在争议.)