Lambda/Blocks の引数内のObjective-C++クラス派生関係

オブジェクトを引数に取るLamdaやBlockの変数に対して、そのオブジェクトと派生関係にあるクラスのオブジェクトを渡すとどうなるか試してみた。
環境はXCode4.5。

まず、LambdaでC++ classの場合。

一つ目は A0 に A0 を渡してるから当然OK。
二つ目はまったく関係のないクラスのオブジェクトを渡してるから当然エラー。
三つ目はA0を扱う関数変数にその派生クラスを扱う関数を渡している。これはアップキャストにあたるので当然エラー。
四つ目はA1を扱う関数変数にその基底クラスを扱う関数を渡している。これはダウンキャストにあたるので当然OK。
という、至極当たり前な結果になった。

同じ事を Blocks と Objective-C classでやっても同じ結果になる。

さて、ここからが本題。
じゃあ、LambdaでObjective-Cクラスを扱ったらどうなるの? BlocksでC++クラスを扱ったらどうなるの?
(クラス関係は上に出てきたまま)

LambdaでObjective-Cクラスを扱った場合、何故かアップキャストになる代入に対してもエラーが発生しない。ただしクラス関係が全く関連がない場合はきちんとエラーになるのでこの挙動はようわからん。。。
そしてBlocksでC++クラスを扱った場合、ダウンキャストになる代入に対してもエラーになる。。。 これは微妙に困る。
いやLambda使えよ、って言われてもGCDやる時はそうはいかないじゃないですか。

この辺の挙動将来はちゃんとしてくれるだろうか。