は、次のコードでX::f()
仮想関数をconstexprにできますか?
struct X
{
constexpr virtual int f() const
{
return 0;
}
};
のような仮想関数はconstexpr
ことはできますか? 【dcl.constexpr]/3(7.1.5、 "constexpr
指定子")から
は、次のコードでX::f()
仮想関数をconstexprにできますか?
struct X
{
constexpr virtual int f() const
{
return 0;
}
};
のような仮想関数はconstexpr
ことはできますか? 【dcl.constexpr]/3(7.1.5、 "constexpr
指定子")から
番号:
constexpr
関数の定義は、以下の要件を満足しなければならない:- それをバーチャルではありません
gccバージョン4.9.2 20141101(Red Hat 4.9.2-1)(GCC) '[それは動作します](http://pastebin.com/gBRT31VG) – zaratustra
コンパイラが何かを受け入れるという理由だけで、それは許されています。 –
Clang ++はリンク内のコードを受け入れません。 –
1分だと思います。それは 'constexpr'の目的を完全に打破します。 –
このような仮想関数は、呼び出し元のインスタンスの完全な型が 'X'であることが分かっている場合にのみ、定数式として使用できます。これは本質的に、言語が「非仮想化ルール」を指定することを必要とする。 –
@πάνταῥεD Dでは、仮想関数を使用してコンパイル時の関数評価を行うことができます。それは考えられないことではありません。 –