次のコードのs3、s4の逆アセンブリが予想と違いました。 #include <string> int main() { std::wstring s1(L"abc"); std::wstring s2(L"def"); std::wstring s3(s1 + s2); // 一時オブジェクトで初期化 std::wstring s4(std::move(s1 + s2)); // 右辺値参照で初期化 return 0; } 予想:s3とs4はどちらもstd::wstringのムーブコンストラクタが呼び出される。 実際:s3とs4はどちらもムーブコンストラクタをスキップして一時オブジェクトまたは右辺値参照が直接代入される。 MSVCの実装を確認したところstd::wstring(std::basic_string)同士の+演算子は一様初期化を使用して一時オブジェクトを返しており(return