以下について間違っていますか?
C++ 標準では、関数へのポインターとオブジェクトへのポインター (およびその逆) の間の変換は、実装定義のセマンティクスで条件付きでサポートされていると述べていますが、すべての C 標準では、これはすべての場合に違法であると述べています。
void foo() {}
int main(void)
{
void (*fp)() = foo;
void* ptr = (void*)fp;
return 0;
}
ISO/IEC 14882:2011
5.2.10 キャストの再解釈 [expr.reinterpret.cast]
8 関数ポインターからオブジェクト ポインター型への変換、またはその逆の変換は、条件付きでサポートされています。このような変換の意味は実装によって定義されますが、実装が両方向の変換をサポートしている場合を除いて、ある型の prvalue を別の型に変換し、元の型の prvalue を、おそらく異なる cvqualification で変換すると、元のポインター値が生成されます。
現在、C標準でそれについて何も見つけることができません...