1を超える深さから返された右辺値参照を渡すときに問題が発生しました。
struct Data {
std :: vector <int> data;
Data () {
data .push_back (1);
};
Data (Data && d)
: data (std :: move (d .data))
{}
};
Data && foo () {
Data d;
return std :: move (d);
}
Data && bar () {
return std :: move (foo ()); // Crashes in autogenerated code
}
Data && baz () {
return foo (); // Crashes in Data move constructor.
}
Data && bop () {
Data d = foo ();
return std :: move (d); // Crashes in autogenerated code.
}
int main () {
Data d_foo = foo (); // This is fine.
Data d_bar = bar (); // Crash.
Data d_bar = baz (); // Crash.
Data d_bop = bop (); // Crash.
}
std::vectorはダブルフリーになっていると思います。g ++(Ubuntu / Linaro 4.4.4-14ubuntu5)4.4.5を使用しています
上記のコードはあなたのために働きますか?私は何か間違ったことをしていますか、それともライブラリまたはコンパイラにバグがありますか?
(天国が)それがコンパイラである場合(gccには他の既知のC ++ 0xバグがあります)、ubuntuでgccをアップグレードまたはパッチするための適切な安全な方法があるかどうか誰かに教えてもらえますか?以前に試しましたが、サポートされていないパッケージが絡み合っています。
どうもありがとう。