题
给定两个相同boost::variant
实例的 a
和<强> b
下,表达的 ( a == b )
强>是允许的。
然而的 ( a != b )
强>似乎是未定义的。这是为什么?
解决方案
我觉得它只是不添加到库中。该Boost.Operators不会真正的帮助,因为无论变种会被自boost ::操作符:: equality_comparable的。大卫·皮埃尔说得对,您可以使用,但你的反应是正确的一点,就是新的运营商!=不会被发现ADL,因此你需要一个使用操作符。
我会问这个升压用户邮件列表上。
<强>从@ AFoglia的评论编辑:强>
7个月后,我学习Boost.Variant,我绊倒遗漏名单这更好的解释。
http://boost.org/Archives/boost/2006/06/ 105895.php
operator==
要求在所述变体目前的实际类operator==
。也呼吁operator!=
也应该调用类的operator!=
。 (因为,理论上,一个类可以被定义,以便a!=b
是不一样的!(a==b)
)。因此,这将增加另一项要求是,在所述变体中的类具有operator!=
。 (有超过您是否可以做这样的假设在邮件列表线程的辩论。)
其他提示
这是从作者自己的答案的链接一>当这个问题被制定boost邮件列表
总结它,在作者看来,实施比较运算符(!=和<)将添加用于创建变体类型的类型的更多要求。
我不与他的观点同意虽然,因为!=所用的相同的方式==来实现,而不必隐藏这些运营商的可能的实施方式的每个构成所述变体
由于它并不需要。
升压具有运营商库其限定操作者!=在操作者的术语==
不隶属于 StackOverflow