C++
C++11

C++でもコンパイル時にa == 1 && a == 2 && a == 3をtrueにしてみたい

(a==1&&a==2&&a==3)を常にtrueにするStackOverflowの問題を解いたQiita記事まとめ

とかいうよくわからん記事がでている。流行りに乗ってみるか。

独自の縛り

  • コンパイル時に評価
  • C++11

コード

まあコンパイル時と言ってもただのoperator overloadだ。

struct A { bool a; };
constexpr bool operator==(A, int) noexcept { return true; }
constexpr A a{};
static_assert(a == 1 && a == 2 && a == 3, "");
int main(){}

他の言語しか知らない人のために解説しておくと、static_assertは第1引数が偽のとき、第2引数の文字列を含むコンパイルエラーを出すものだ。エラーが出なければtrueになったといえる。