2009-05-21

VC10のrvalue referenceはどうなってるのだろう。

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

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.