読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

operator +の自動生成のconstexpr化は多分詰んでる

 operator +はoperator +=を使って実装するのがよいと噂されて久しいですが、これだとconstexprなoperator +作れなくない?という事態に至り残当している感じですね。はい。

template <typename Hoge>
struct add {
  friend constexpr Hoge operator +(const Hoge &lhs, const Hoge &rhs) {
    return Hoge(lhs) += rhs;
  }
};

struct hoge : private add<hoge> {
  explicit constexpr  hoge(int h) : h_(h) {}

  constexpr hoge &operator +=(const hoge &rhs) {
    // どう書けと???
  }

  int h_;
};


int main() {
  constexpr hoge h1(1);
  constexpr hoge h2(2);
  constexpr hoge h3 = h2 + h1; // ふぅ
  return 0;
}

 普通に無理ですね。自動生成の場合もoperator +=から作るんでオワコンしてます。はい。
 やっぱり無闇にconstexpr付けまくるのはよそうって話なんですかね。