给定两个相同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!=。 (有超过您是否可以做这样的假设在邮件列表线程的辩论。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top