Commit 2aec8803 authored by moti's avatar moti Committed by Wouter van Oortmerssen

[C++]Use noexcept in union type move ctor/Add move assingment (#4249)

* Use noexcept in union type move ctor/Add move assingment

* Add NOEXCEPT macro to deal with _MS_VER/Remove delegating ctor in union type class

* Add FLATBUFFERS_NOEXCEPT to generated union class
parent 238a8ebb
...@@ -113,6 +113,13 @@ ...@@ -113,6 +113,13 @@
#define FLATBUFFERS_CONSTEXPR #define FLATBUFFERS_CONSTEXPR
#endif #endif
#if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46 || \
defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026
#define FLATBUFFERS_NOEXCEPT noexcept
#else
#define FLATBUFFERS_NOEXCEPT
#endif
#if defined(_MSC_VER) #if defined(_MSC_VER)
#pragma warning(push) #pragma warning(push)
#pragma warning(disable: 4127) // C4127: conditional expression is constant #pragma warning(disable: 4127) // C4127: conditional expression is constant
......
...@@ -74,11 +74,13 @@ struct EquipmentUnion { ...@@ -74,11 +74,13 @@ struct EquipmentUnion {
flatbuffers::NativeTable *table; flatbuffers::NativeTable *table;
EquipmentUnion() : type(Equipment_NONE), table(nullptr) {} EquipmentUnion() : type(Equipment_NONE), table(nullptr) {}
EquipmentUnion(EquipmentUnion&& u): EquipmentUnion(EquipmentUnion&& u) FLATBUFFERS_NOEXCEPT :
type(Equipment_NONE), table(nullptr) type(Equipment_NONE), table(nullptr)
{ std::swap(type, u.type); std::swap(table, u.table); } { std::swap(type, u.type); std::swap(table, u.table); }
EquipmentUnion(const EquipmentUnion &); EquipmentUnion(const EquipmentUnion &);
EquipmentUnion &operator=(const EquipmentUnion &); EquipmentUnion &operator=(const EquipmentUnion &);
EquipmentUnion &operator=(EquipmentUnion &&u) FLATBUFFERS_NOEXCEPT
{ std::swap(type, u.type); std::swap(table, u.table); return *this; }
~EquipmentUnion() { Reset(); } ~EquipmentUnion() { Reset(); }
void Reset(); void Reset();
......
...@@ -660,11 +660,13 @@ class CppGenerator : public BaseGenerator { ...@@ -660,11 +660,13 @@ class CppGenerator : public BaseGenerator {
code_ += " flatbuffers::NativeTable *table;"; code_ += " flatbuffers::NativeTable *table;";
code_ += ""; code_ += "";
code_ += " {{NAME}}Union() : type({{NONE}}), table(nullptr) {}"; code_ += " {{NAME}}Union() : type({{NONE}}), table(nullptr) {}";
code_ += " {{NAME}}Union({{NAME}}Union&& u):"; code_ += " {{NAME}}Union({{NAME}}Union&& u) FLATBUFFERS_NOEXCEPT :";
code_ += " type({{NONE}}), table(nullptr)"; code_ += " type({{NONE}}), table(nullptr)";
code_ += " { std::swap(type, u.type); std::swap(table, u.table); }"; code_ += " { std::swap(type, u.type); std::swap(table, u.table); }";
code_ += " {{NAME}}Union(const {{NAME}}Union &);"; code_ += " {{NAME}}Union(const {{NAME}}Union &);";
code_ += " {{NAME}}Union &operator=(const {{NAME}}Union &);"; code_ += " {{NAME}}Union &operator=(const {{NAME}}Union &);";
code_ += " {{NAME}}Union &operator=({{NAME}}Union &&u) FLATBUFFERS_NOEXCEPT";
code_ += " { std::swap(type, u.type); std::swap(table, u.table); return *this; }";
code_ += " ~{{NAME}}Union() { Reset(); }"; code_ += " ~{{NAME}}Union() { Reset(); }";
code_ += ""; code_ += "";
code_ += " void Reset();"; code_ += " void Reset();";
......
...@@ -105,11 +105,13 @@ struct AnyUnion { ...@@ -105,11 +105,13 @@ struct AnyUnion {
flatbuffers::NativeTable *table; flatbuffers::NativeTable *table;
AnyUnion() : type(Any_NONE), table(nullptr) {} AnyUnion() : type(Any_NONE), table(nullptr) {}
AnyUnion(AnyUnion&& u): AnyUnion(AnyUnion&& u) FLATBUFFERS_NOEXCEPT :
type(Any_NONE), table(nullptr) type(Any_NONE), table(nullptr)
{ std::swap(type, u.type); std::swap(table, u.table); } { std::swap(type, u.type); std::swap(table, u.table); }
AnyUnion(const AnyUnion &); AnyUnion(const AnyUnion &);
AnyUnion &operator=(const AnyUnion &); AnyUnion &operator=(const AnyUnion &);
AnyUnion &operator=(AnyUnion &&u) FLATBUFFERS_NOEXCEPT
{ std::swap(type, u.type); std::swap(table, u.table); return *this; }
~AnyUnion() { Reset(); } ~AnyUnion() { Reset(); }
void Reset(); void Reset();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment