From 17c5f89d4fe386a11db0ac6126fa2e7f4abd92eb Mon Sep 17 00:00:00 2001 From: Andrei Lebedev Date: Sun, 26 Feb 2017 10:06:48 +0400 Subject: [PATCH] Fixed move constructor in generated union class (#4192) * Fixed move constructor in generated union class * Removed delegating constructor --- samples/monster_generated.h | 3 ++- src/idl_gen_cpp.cpp | 3 ++- tests/monster_test_generated.h | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/samples/monster_generated.h b/samples/monster_generated.h index 4a12b0a93..1f2732360 100644 --- a/samples/monster_generated.h +++ b/samples/monster_generated.h @@ -75,7 +75,8 @@ struct EquipmentUnion { EquipmentUnion() : type(Equipment_NONE), table(nullptr) {} EquipmentUnion(EquipmentUnion&& u): - type(std::move(u.type)), table(std::move(u.table)) {} + type(Equipment_NONE), table(nullptr) + { std::swap(type, u.type); std::swap(table, u.table); } EquipmentUnion(const EquipmentUnion &); EquipmentUnion &operator=(const EquipmentUnion &); ~EquipmentUnion() { Reset(); } diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 1e53088e4..3adc22f58 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -652,7 +652,8 @@ class CppGenerator : public BaseGenerator { code_ += ""; code_ += " {{NAME}}Union() : type({{NONE}}), table(nullptr) {}"; code_ += " {{NAME}}Union({{NAME}}Union&& u):"; - code_ += " type(std::move(u.type)), table(std::move(u.table)) {}"; + code_ += " type({{NONE}}), table(nullptr)"; + code_ += " { std::swap(type, u.type); std::swap(table, u.table); }"; code_ += " {{NAME}}Union(const {{NAME}}Union &);"; code_ += " {{NAME}}Union &operator=(const {{NAME}}Union &);"; code_ += " ~{{NAME}}Union() { Reset(); }"; diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index ce952e1a7..bf5c21527 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -104,7 +104,8 @@ struct AnyUnion { AnyUnion() : type(Any_NONE), table(nullptr) {} AnyUnion(AnyUnion&& u): - type(std::move(u.type)), table(std::move(u.table)) {} + type(Any_NONE), table(nullptr) + { std::swap(type, u.type); std::swap(table, u.table); } AnyUnion(const AnyUnion &); AnyUnion &operator=(const AnyUnion &); ~AnyUnion() { Reset(); }