void f() {} typedef void (&&rref_type)(void) ; // error C2440 rref_type rref = static_cast<rref_type>(f) ;
これは、VC10がstatic_castのオペランドに、function-to-pointer conversionを適用しているためである。なぜかというと、VC10はこの場合に、5.2.9 Static cast [expr.static.cast] paragraph 8を適用しているためである。
しかし、実際には、この場合、5.2.9 Static cast [expr.static.cast] paragraph 3が適用されるべきである。
むむっこれはQCに是非報告しましょう。
ReplyDeleteSP1が楽しみです。