これは、2010年以降に開かれたVisual C++コンパイラのバグであり、マイクロソフトは明らかにすぐに修正されないようです。
はVisual Studio bug 529700を参照してください:
I can confirm that this is a bug with Visual C++. Unfortunately it does not meet the triage bar for the current release of Visual C++ - but we will keep the issue in our database and we will look at it again during the development phase of a future release of Visual C++.
良い回避策はまさに、あなたが達成しようとしているかに依存します。
namespace std
{
template<>
struct less<Fruit>
{
bool operator()(Fruit const& lhs, Fruit const& rhs) const
{
// your comparison logic
}
};
}
std::set<Fruit> s;
をそれとも、この目的のためにファンクタクラスを定義します:あなたはstd::map
かstd::set
のような標準的なコンテナクラスにあなたのFruit
を入れたい場合たとえば、あなたはstd::less
を専門に検討する必要があります
struct FruitComparison
{
bool operator()(Fruit const& lhs, Fruit const& rhs) const
{
// your comparison logic
}
};
std::set<Fruit, FruitComparison> s;
あなたがアルゴリズムの比較が必要な場合は、その後、あなたは、ラムダを使用することがあります:
std::vector<Fruit> v;
std::sort(begin(v), end(v), [](Fruit const& lhs, Fruit const& rhs)
{
// your comparison logic
});
私も試してみました演算子<(const Fruit&l、const Fruit&r)が同じ結果を得ました。 – user6514323
私はあなたの心配を得ることはありません。あなたの[オペレータは実際に呼ばれています](http://coliru.stacked-crooked.com/a/c3f8b15987049420)? –
私のために働く。 http://ideone.com/GO6HWR。 –