定数式で関数アドレスを使用する方法はありますか?
void foo()
{}
int main()
{
static_assert(&foo, "test error");
}
これはコンパイルされません。
エラー C2057: 定数式が必要です
この背後にある意図は、コンパイル時に 2 つの関数アドレスを比較したいということです。
定数式で関数アドレスを使用する方法はありますか?
void foo()
{}
int main()
{
static_assert(&foo, "test error");
}
これはコンパイルされません。
エラー C2057: 定数式が必要です
この背後にある意図は、コンパイル時に 2 つの関数アドレスを比較したいということです。
これは間違いなくコンパイラのバグです。
関数はテンプレートのテンプレート引数として使用できます。つまり、関数は const 式です。(イデオンを参照)。
また、上記のコードはgcc 4.6.1
で正常にコンパイルされますが、ideone ではコンパイルされませんがgcc-4.5.1
、コードに関してバグのある ideone が使用されます。
これは私の理解です、FWIW:
関数型はコンパイル時に認識されますが、関数アドレスはリンク時にのみ認識されます。したがって、関数型をテンプレートパラメータとして使用できますが、アドレスはコンパイル時に定数/既知ではありません。
サンプルコードでは、コンパイラはコンパイル時にアドレスがゼロ以外であると推測できますが、その場合、特定のアドレスを知ることはできません。ただし、これはコンパイラのバグではありません。