【一人 C++20 Advent Calendar 2019】定数式からの仮想関数の呼び出しを許可【6日目】

一人 C++20 Advent Calendar 2019 6日目の記事になります。

定数式からの仮想関数の呼び出しを許可

定数式での仮想関数呼び出しが可能になりました。なりました!

struct X {
    virtual int value() const = 0;
};

constexpr int
twice(X const& x) {
    // 参照を経由して仮想関数を定数式で呼び出すことが可能
    return x.value() + x.value();
}

struct Y : X {
    constexpr int value() const { return 42; }
};

int
main(){
    constexpr Y y;
    static_assert(twice(y) == 84);
    return 0;
}

C++11 の時代から constexpr やってる身としてはまさかこんな事が可能になるとは夢にも思ってませんでした…。
もう全部 constexpr でいいんじゃ…。

サポートコンパイラ

  • GCC 9
  • Clang 9.0

参照