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