Skip to content

Latest commit

 

History

History
44 lines (29 loc) · 1.34 KB

allow_virtual_function_calls_in_constant_expressions.md

File metadata and controls

44 lines (29 loc) · 1.34 KB

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

  • cpp20[meta cpp]

このページはC++20に採用された言語機能の変更を解説しています。

のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

概要

C++20では、仮想関数に対してconstexprを指定し、定数式の文脈で呼び出せるようになる。

constexprな仮想関数をconstexpr仮想関数としてオーバーライドでき、逆もできる。一部のオーバーライドがconstexprで、一部がそうでない場合は、非constexprな仮想関数の呼び出しのみ定数式にならない。

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

// 非constexprな純粋仮想関数を、constexpr仮想関数としてオーバーライド
struct Y : public X {
  constexpr int f() const override { return 1; }
};

int main()
{
  static constexpr Y y{};
  constexpr const X& x = y;

  static_assert(x.f() == 1);
}

参照