void
ポインタに関数ポインタを割り当てる
double f_dummy(double x) { return x; }
...
void *pv = f_dummy; //compilation error
は違法です。しかし、答えは以下の文で終わります。
特定のオペレーティングシステム上の特定のコンパイラの特定のバージョンで動作していると思われる場合は、私に電子メールを送信しないでください。私は気にしない。期間は違法です。
編集:他の人への警告として、私はこのクラステンプレートを含む継承の場合を通じて、振る舞い「はを動作するようです」出会いました。コンパイラの警告も予期しない実行時の動作もありません。
これは
コンパイルし、きれいに(g++ -std=c++11 -Wall
)を実行
...
auto l_func = [](double x){ return f_dummy(x); };
void *pv = &l_func;
auto pl = static_cast<decltype(&l_func)>(pv);
cout << (*pl)(5.) << endl;
、本当に合法である、例えば、私のOCDの骨をくすぐる、私が何をしてきたなら、私は思ってしまいます。それは...ですか?
'l_func'は関数ではありません。それはオブジェクトです。 –