0

このコードがコンパイルされない理由がわかりません。一部の Web サイトによると、 のa == bように書き換える必要がありますがa.operator<=>(b) == 0、clang と gcc の両方がコンパイルに失敗します。

#include <utility>
#include <stdio.h>

struct A {
public:
    int x_ = 0;

public:
    std::strong_ordering operator<=>(const A& o) const 
    {
        return int(x_ == o.x_ ? 0 : x_ < o.x_ ? -1 : 1) <=> 0;
    }
};

int main()
{
  A a{1};
  A b{2};

  if(a == b) printf("a==b\n");
}

ただし、デフォルトを使用すると、すべてが機能します。

...
   std::strong_ordering operator<=>(const A& o) const = default;
...

だから私の質問は、どうやってdefault実装を<=>手作業で書くのですか?

4

0 に答える 0