VCの独自規格で、一部のrvalueがlvalueとして使えてしまうのは驚いた。こんな独自仕様では、プログラマの誤解を招くだろうし、ひどい互換性の問題を引き起こしていそうだ。
まあでも、C++0xのrvalue referenceを使うには、lvalueとrvalueの違いを理解しなくてはならないから、将来的には少しマシになるのかもしれない。でも、規格を読んで言語を学ぼうとする、骨のあるプログラマは少ないので、あまりマシにはならないかもしれない。
しかし、rvalue referenceと、このVCの独自仕様は共存できるのだろうか。少し頭の中で考えてみたが、共存できないというコードは思いつかなかった。むしろ、rvalue referenceが関数の戻り値の型であるコードと、あまり変わらないような気さえする
struct Foo { void func() {} } ; Foo f() { return Foo() ; } Foo && g() { return Foo() ; } void h() { f().func() ; // Error. ただし現行のVCでは通る g().func() ; // OK. }
No comments:
Post a Comment