質問

2つの同一のboost::variantインスタンス a および b が与えられた場合、式 ( a == b ) が許可されます。

>

ただし、 ( a != b ) は未定義のようです。これはなぜですか?

役に立ちましたか?

解決

ライブラリに追加されていないだけだと思います。 Boost.Operatorsは、どちらのバリアントもboost :: operator :: equality_comparableから派生したため、実際には役に立ちません。 David Pierreはそれを使用できると言うのは正しいですが、あなたの応答も正しいです。新しい演算子はADLによって検出されないため、using演算子が必要になります。

boost-usersメーリングリストでこれを尋ねます。

@AFogliaのコメントから編集:

7か月後、Boost.Variantを勉強しています。この省略リストのより良い説明につまずきます。

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

operator==は、現在バリアントにある実際のクラスのoperator!=を呼び出します。同様に、a!=bを呼び出すと、クラスの!(a==b)も呼び出す必要があります。 (理論的には、<=>が<=>と同じではないようにクラスを定義できるため。)そのため、バリアント内のクラスに<=>が必要であるという別の要件が追加されます。 (メーリングリストのスレッドでこの仮定を立てることができるかどうかについては議論があります。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top