6

派生クラス用に作成されていないデフォルトの移動コンストラクタまたは代入演算子があるのはなぜですか? 私が何を意味するかを示すために。このセットアップコードを持つ:

#include <utility>

struct A
{
  A () { }
  A (A&&) { throw 0; }
  A& operator= (A&&) { throw 0; }
};

struct B : A
{ };

次の行のいずれかがスローされます。

A  x (std::move (A ());
A  x;  x = A ();

ただし、次のいずれも行いません。

B  x (std::move (B ());
B  x;  x = B ();

念のため、GCC 4.4 でテストしました。

編集: GCC 4.5 での後のテストでは、同じ動作が示されました。

4

1 に答える 1

5

0x FCD の 12.8 (特に move ctor の場合は 12.8/17) を読み取ると、これは GCC のバグのようです。4.4 と同じことが 4.5 でも起こっているようです。

削除された関数などのコーナー ケースを見逃している可能性がありますが、まだその兆候は見られません。

于 2010-04-22T21:11:21.830 に答える