- 803 名前:デフォルトの名無しさん [2008/02/10(日) 14:30:08 ]
- 右辺値参照でT & &&がT &になるというのが納得できない。
例えばN1377には右辺値を左辺値に変換する関数moveが載っているが、 template <class T> inline T&& move(T&& x) { return static_cast<T&&>(x); } moveを使った次のような(自然な)コードは動かない。 void foo(move_ptr<Bar> &d, move_ptr<Bar> &s) { (何か例外を投げる可能性がある処理) d = move(s); // 処理に成功したらsをdに移す } N1377やN1385で導入している型推論のルールによると、 Tはmove_ptr<Bar>ではなくmove_ptr<Bar> &になる。 するとmoveはmove_ptr<Bar> & &&型、つまりmove_ptr<Bar> &型を返すことになる。 上のような処理をしたければ、次のように直接static_castするしかない。 d = static_cast<move_ptr<Bar> &&>(s);
|

|