From article <bq503t$s19$1@ns.src.ricoh.co.jp>
        by ohta@src.ricoh.co.jp

 件のtypedefと同じ型になるのが

>     int (*(*ptr1)())();

なので、

>     ptr1 = ((int (*)())(*)())ptr2;

じゃ、キャストする型が違ってますよね。(^^;
#     ptr1 = (int (*(*)())())ptr2;

 (int (*)())(*)() だと、(*)() を int (*)() で
キャストしようとしているのでわ?