From 7f33cf682a5d1150318806ef1ce1e6ee5cae146e Mon Sep 17 00:00:00 2001 From: Vladimir Glavnyy <31897320+vglavnyy@users.noreply.github.com> Date: Tue, 8 Dec 2020 02:19:36 +0700 Subject: [PATCH] [C++] Switch `flatc` to `--cpp-std c++11` C++ code generator (#6306) Prior to this commit the default C++ code generator was `c++0x`. A code generated with `c++0x` code-gen might have a vulnerability (undefined behavior) connected evolution of enums in a schema. This UB could break the backward compatibility if previously generated code casts an unknown enumerator to enum type that knows nothing about future enumerators added to the schema. The main differences between `c++0x` and `c++11`: - generated enums use explicitly declared underlying type; - generated object-API tables don't declare default ctor() explicitly, instead of it default data member initializers are generated. Please use `flatc --cpp-std c++0x` option for backward compatibility with old compilers. --- docs/source/Compiler.md | 5 +- samples/monster_generated.h | 38 ++-- src/flatc.cpp | 2 + src/idl_gen_cpp.cpp | 2 +- tests/arrays_test_generated.h | 6 +- tests/monster_extra_generated.h | 32 +-- tests/monster_test_generated.h | 197 +++++++----------- .../namespace_test1_generated.h | 9 +- .../namespace_test2_generated.h | 25 +-- tests/native_type_test_generated.h | 6 +- tests/optional_scalars_generated.h | 114 ++++------ tests/test.cpp | 2 +- tests/union_vector/union_vector_generated.h | 17 +- 13 files changed, 168 insertions(+), 287 deletions(-) diff --git a/docs/source/Compiler.md b/docs/source/Compiler.md index 973c4116e..7b15c79d9 100644 --- a/docs/source/Compiler.md +++ b/docs/source/Compiler.md @@ -142,8 +142,9 @@ Additional options: - `--cpp-std CPP_STD` : Generate a C++ code using features of selected C++ standard. Supported `CPP_STD` values: - * `c++0x` - generate code compatible with old compilers (VS2010). - * `c++11` - use C++11 code generator (default); + * `c++0x` - generate code compatible with old compilers (VS2010), + * `c++11` - use C++11 code generator (default), + * `c++17` - use C++17 features in generated code (experimental). - `--object-prefix` : Customise class prefix for C++ object-based API. diff --git a/samples/monster_generated.h b/samples/monster_generated.h index 8afde1ef8..9b70be4a7 100644 --- a/samples/monster_generated.h +++ b/samples/monster_generated.h @@ -32,7 +32,7 @@ inline const flatbuffers::TypeTable *MonsterTypeTable(); inline const flatbuffers::TypeTable *WeaponTypeTable(); -enum Color { +enum Color : int8_t { Color_Red = 0, Color_Green = 1, Color_Blue = 2, @@ -65,7 +65,7 @@ inline const char *EnumNameColor(Color e) { return EnumNamesColor()[index]; } -enum Equipment { +enum Equipment : uint8_t { Equipment_NONE = 0, Equipment_Weapon = 1, Equipment_MIN = Equipment_NONE, @@ -224,20 +224,15 @@ inline bool operator!=(const Vec3 &lhs, const Vec3 &rhs) { struct MonsterT : public flatbuffers::NativeTable { typedef Monster TableType; - flatbuffers::unique_ptr pos; - int16_t mana; - int16_t hp; - std::string name; - std::vector inventory; - MyGame::Sample::Color color; - std::vector> weapons; - MyGame::Sample::EquipmentUnion equipped; - std::vector path; - MonsterT() - : mana(150), - hp(100), - color(MyGame::Sample::Color_Blue) { - } + flatbuffers::unique_ptr pos{}; + int16_t mana = 150; + int16_t hp = 100; + std::string name{}; + std::vector inventory{}; + MyGame::Sample::Color color = MyGame::Sample::Color_Blue; + std::vector> weapons{}; + MyGame::Sample::EquipmentUnion equipped{}; + std::vector path{}; }; inline bool operator==(const MonsterT &lhs, const MonsterT &rhs) { @@ -471,11 +466,8 @@ flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, struct WeaponT : public flatbuffers::NativeTable { typedef Weapon TableType; - std::string name; - int16_t damage; - WeaponT() - : damage(0) { - } + std::string name{}; + int16_t damage = 0; }; inline bool operator==(const WeaponT &lhs, const WeaponT &rhs) { @@ -568,7 +560,7 @@ inline flatbuffers::Offset CreateWeaponDirect( flatbuffers::Offset CreateWeapon(flatbuffers::FlatBufferBuilder &_fbb, const WeaponT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); inline MonsterT *Monster::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new MonsterT()); + auto _o = std::unique_ptr(new MonsterT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -621,7 +613,7 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder } inline WeaponT *Weapon::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new WeaponT()); + auto _o = std::unique_ptr(new WeaponT()); UnPackTo(_o.get(), _resolver); return _o.release(); } diff --git a/src/flatc.cpp b/src/flatc.cpp index 1233ff937..40e16fab9 100644 --- a/src/flatc.cpp +++ b/src/flatc.cpp @@ -376,6 +376,8 @@ int FlatCompiler::Compile(int argc, const char **argv) { if (++argi >= argc) Error("missing C++ standard specification" + arg, true); opts.cpp_std = argv[argi]; + } else if (arg.rfind("--cpp-std=", 0) == 0) { + opts.cpp_std = arg.substr(std::string("--cpp-std=").size()); } else { for (size_t i = 0; i < params_.num_generators; ++i) { if (arg == params_.generators[i].generator_opt_long || diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index a56dad91c..742587a48 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -3312,7 +3312,7 @@ bool GenerateCPP(const Parser &parser, const std::string &path, cpp::IDLOptionsCpp opts(parser.opts); // The '--cpp_std' argument could be extended (like ASAN): // Example: "flatc --cpp_std c++17:option1:option2". - auto cpp_std = !opts.cpp_std.empty() ? opts.cpp_std : "C++0X"; + auto cpp_std = !opts.cpp_std.empty() ? opts.cpp_std : "C++11"; std::transform(cpp_std.begin(), cpp_std.end(), cpp_std.begin(), CharToUpper); if (cpp_std == "C++0X") { opts.g_cpp_std = cpp::CPP_STD_X0; diff --git a/tests/arrays_test_generated.h b/tests/arrays_test_generated.h index 2f47a9c02..d7660cfa6 100644 --- a/tests/arrays_test_generated.h +++ b/tests/arrays_test_generated.h @@ -264,9 +264,7 @@ inline bool operator!=(const ArrayStruct &lhs, const ArrayStruct &rhs) { struct ArrayTableT : public flatbuffers::NativeTable { typedef ArrayTable TableType; - flatbuffers::unique_ptr a; - ArrayTableT() { - } + flatbuffers::unique_ptr a{}; }; inline bool operator==(const ArrayTableT &lhs, const ArrayTableT &rhs) { @@ -333,7 +331,7 @@ inline flatbuffers::Offset CreateArrayTable( flatbuffers::Offset CreateArrayTable(flatbuffers::FlatBufferBuilder &_fbb, const ArrayTableT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); inline ArrayTableT *ArrayTable::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new ArrayTableT()); + auto _o = std::unique_ptr(new ArrayTableT()); UnPackTo(_o.get(), _resolver); return _o.release(); } diff --git a/tests/monster_extra_generated.h b/tests/monster_extra_generated.h index 5c4d8de1c..be4801fb4 100644 --- a/tests/monster_extra_generated.h +++ b/tests/monster_extra_generated.h @@ -19,26 +19,16 @@ inline const flatbuffers::TypeTable *MonsterExtraTypeTable(); struct MonsterExtraT : public flatbuffers::NativeTable { typedef MonsterExtra TableType; - double d0; - double d1; - double d2; - double d3; - float f0; - float f1; - float f2; - float f3; - std::vector dvec; - std::vector fvec; - MonsterExtraT() - : d0(std::numeric_limits::quiet_NaN()), - d1(std::numeric_limits::quiet_NaN()), - d2(std::numeric_limits::infinity()), - d3(-std::numeric_limits::infinity()), - f0(std::numeric_limits::quiet_NaN()), - f1(std::numeric_limits::quiet_NaN()), - f2(std::numeric_limits::infinity()), - f3(-std::numeric_limits::infinity()) { - } + double d0 = std::numeric_limits::quiet_NaN(); + double d1 = std::numeric_limits::quiet_NaN(); + double d2 = std::numeric_limits::infinity(); + double d3 = -std::numeric_limits::infinity(); + float f0 = std::numeric_limits::quiet_NaN(); + float f1 = std::numeric_limits::quiet_NaN(); + float f2 = std::numeric_limits::infinity(); + float f3 = -std::numeric_limits::infinity(); + std::vector dvec{}; + std::vector fvec{}; }; inline bool operator==(const MonsterExtraT &lhs, const MonsterExtraT &rhs) { @@ -261,7 +251,7 @@ inline flatbuffers::Offset CreateMonsterExtraDirect( flatbuffers::Offset CreateMonsterExtra(flatbuffers::FlatBufferBuilder &_fbb, const MonsterExtraT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); inline MonsterExtraT *MonsterExtra::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new MonsterExtraT()); + auto _o = std::unique_ptr(new MonsterExtraT()); UnPackTo(_o.get(), _resolver); return _o.release(); } diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index 8f55b1d28..9eb49d418 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -107,7 +107,7 @@ inline const flatbuffers::TypeTable *MonsterTypeTable(); inline const flatbuffers::TypeTable *TypeAliasesTypeTable(); /// Composite components of Monster color. -enum Color { +enum Color : uint8_t { Color_Red = 1, /// \brief color Green /// Green is bit_flag with value (1u << 1) @@ -148,7 +148,7 @@ inline const char *EnumNameColor(Color e) { return EnumNamesColor()[index]; } -enum Race { +enum Race : int8_t { Race_None = -1, Race_Human = 0, Race_Dwarf = 1, @@ -184,7 +184,7 @@ inline const char *EnumNameRace(Race e) { return EnumNamesRace()[index]; } -enum Any { +enum Any : uint8_t { Any_NONE = 0, Any_Monster = 1, Any_TestSimpleTableWithEnum = 2, @@ -326,7 +326,7 @@ inline bool operator!=(const AnyUnion &lhs, const AnyUnion &rhs) { bool VerifyAny(flatbuffers::Verifier &verifier, const void *obj, Any type); bool VerifyAnyVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector> *values, const flatbuffers::Vector *types); -enum AnyUniqueAliases { +enum AnyUniqueAliases : uint8_t { AnyUniqueAliases_NONE = 0, AnyUniqueAliases_M = 1, AnyUniqueAliases_TS = 2, @@ -468,7 +468,7 @@ inline bool operator!=(const AnyUniqueAliasesUnion &lhs, const AnyUniqueAliasesU bool VerifyAnyUniqueAliases(flatbuffers::Verifier &verifier, const void *obj, AnyUniqueAliases type); bool VerifyAnyUniqueAliasesVector(flatbuffers::Verifier &verifier, const flatbuffers::Vector> *values, const flatbuffers::Vector *types); -enum AnyAmbiguousAliases { +enum AnyAmbiguousAliases : uint8_t { AnyAmbiguousAliases_NONE = 0, AnyAmbiguousAliases_M1 = 1, AnyAmbiguousAliases_M2 = 2, @@ -781,8 +781,6 @@ inline bool operator!=(const Ability &lhs, const Ability &rhs) { struct InParentNamespaceT : public flatbuffers::NativeTable { typedef InParentNamespace TableType; - InParentNamespaceT() { - } }; inline bool operator==(const InParentNamespaceT &, const InParentNamespaceT &) { @@ -836,8 +834,6 @@ namespace Example2 { struct MonsterT : public flatbuffers::NativeTable { typedef Monster TableType; - MonsterT() { - } }; inline bool operator==(const MonsterT &, const MonsterT &) { @@ -893,10 +889,7 @@ namespace Example { struct TestSimpleTableWithEnumT : public flatbuffers::NativeTable { typedef TestSimpleTableWithEnum TableType; - MyGame::Example::Color color; - TestSimpleTableWithEnumT() - : color(MyGame::Example::Color_Green) { - } + MyGame::Example::Color color = MyGame::Example::Color_Green; }; inline bool operator==(const TestSimpleTableWithEnumT &lhs, const TestSimpleTableWithEnumT &rhs) { @@ -964,13 +957,9 @@ flatbuffers::Offset CreateTestSimpleTableWithEnum(flatb struct StatT : public flatbuffers::NativeTable { typedef Stat TableType; - std::string id; - int64_t val; - uint16_t count; - StatT() - : val(0), - count(0) { - } + std::string id{}; + int64_t val = 0; + uint16_t count = 0; }; inline bool operator==(const StatT &lhs, const StatT &rhs) { @@ -1080,10 +1069,7 @@ flatbuffers::Offset CreateStat(flatbuffers::FlatBufferBuilder &_fbb, const struct ReferrableT : public flatbuffers::NativeTable { typedef Referrable TableType; - uint64_t id; - ReferrableT() - : id(0) { - } + uint64_t id = 0; }; inline bool operator==(const ReferrableT &lhs, const ReferrableT &rhs) { @@ -1157,73 +1143,52 @@ flatbuffers::Offset CreateReferrable(flatbuffers::FlatBufferBuilder struct MonsterT : public flatbuffers::NativeTable { typedef Monster TableType; - flatbuffers::unique_ptr pos; - int16_t mana; - int16_t hp; - std::string name; - std::vector inventory; - MyGame::Example::Color color; - MyGame::Example::AnyUnion test; - std::vector test4; - std::vector testarrayofstring; - std::vector> testarrayoftables; - flatbuffers::unique_ptr enemy; - std::vector testnestedflatbuffer; - flatbuffers::unique_ptr testempty; - bool testbool; - int32_t testhashs32_fnv1; - uint32_t testhashu32_fnv1; - int64_t testhashs64_fnv1; - uint64_t testhashu64_fnv1; - int32_t testhashs32_fnv1a; - Stat *testhashu32_fnv1a; - int64_t testhashs64_fnv1a; - uint64_t testhashu64_fnv1a; - std::vector testarrayofbools; - float testf; - float testf2; - float testf3; - std::vector testarrayofstring2; - std::vector testarrayofsortedstruct; - std::vector flex; - std::vector test5; - std::vector vector_of_longs; - std::vector vector_of_doubles; - flatbuffers::unique_ptr parent_namespace_test; - std::vector> vector_of_referrables; - ReferrableT *single_weak_reference; - std::vector vector_of_weak_references; - std::vector> vector_of_strong_referrables; - ReferrableT *co_owning_reference; - std::vector> vector_of_co_owning_references; - ReferrableT *non_owning_reference; - std::vector vector_of_non_owning_references; - MyGame::Example::AnyUniqueAliasesUnion any_unique; - MyGame::Example::AnyAmbiguousAliasesUnion any_ambiguous; - std::vector vector_of_enums; - MyGame::Example::Race signed_enum; - std::vector testrequirednestedflatbuffer; - MonsterT() - : mana(150), - hp(100), - color(MyGame::Example::Color_Blue), - testbool(false), - testhashs32_fnv1(0), - testhashu32_fnv1(0), - testhashs64_fnv1(0), - testhashu64_fnv1(0), - testhashs32_fnv1a(0), - testhashu32_fnv1a(nullptr), - testhashs64_fnv1a(0), - testhashu64_fnv1a(0), - testf(3.14159f), - testf2(3.0f), - testf3(0.0f), - single_weak_reference(nullptr), - co_owning_reference(nullptr), - non_owning_reference(nullptr), - signed_enum(MyGame::Example::Race_None) { - } + flatbuffers::unique_ptr pos{}; + int16_t mana = 150; + int16_t hp = 100; + std::string name{}; + std::vector inventory{}; + MyGame::Example::Color color = MyGame::Example::Color_Blue; + MyGame::Example::AnyUnion test{}; + std::vector test4{}; + std::vector testarrayofstring{}; + std::vector> testarrayoftables{}; + flatbuffers::unique_ptr enemy{}; + std::vector testnestedflatbuffer{}; + flatbuffers::unique_ptr testempty{}; + bool testbool = false; + int32_t testhashs32_fnv1 = 0; + uint32_t testhashu32_fnv1 = 0; + int64_t testhashs64_fnv1 = 0; + uint64_t testhashu64_fnv1 = 0; + int32_t testhashs32_fnv1a = 0; + Stat *testhashu32_fnv1a = nullptr; + int64_t testhashs64_fnv1a = 0; + uint64_t testhashu64_fnv1a = 0; + std::vector testarrayofbools{}; + float testf = 3.14159f; + float testf2 = 3.0f; + float testf3 = 0.0f; + std::vector testarrayofstring2{}; + std::vector testarrayofsortedstruct{}; + std::vector flex{}; + std::vector test5{}; + std::vector vector_of_longs{}; + std::vector vector_of_doubles{}; + flatbuffers::unique_ptr parent_namespace_test{}; + std::vector> vector_of_referrables{}; + ReferrableT *single_weak_reference = nullptr; + std::vector vector_of_weak_references{}; + std::vector> vector_of_strong_referrables{}; + ReferrableT *co_owning_reference = nullptr; + std::vector> vector_of_co_owning_references{}; + ReferrableT *non_owning_reference = nullptr; + std::vector vector_of_non_owning_references{}; + MyGame::Example::AnyUniqueAliasesUnion any_unique{}; + MyGame::Example::AnyAmbiguousAliasesUnion any_ambiguous{}; + std::vector vector_of_enums{}; + MyGame::Example::Race signed_enum = MyGame::Example::Race_None; + std::vector testrequirednestedflatbuffer{}; }; inline bool operator==(const MonsterT &lhs, const MonsterT &rhs) { @@ -2178,30 +2143,18 @@ flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder &_fbb, struct TypeAliasesT : public flatbuffers::NativeTable { typedef TypeAliases TableType; - int8_t i8; - uint8_t u8; - int16_t i16; - uint16_t u16; - int32_t i32; - uint32_t u32; - int64_t i64; - uint64_t u64; - float f32; - double f64; - std::vector v8; - std::vector vf64; - TypeAliasesT() - : i8(0), - u8(0), - i16(0), - u16(0), - i32(0), - u32(0), - i64(0), - u64(0), - f32(0.0f), - f64(0.0) { - } + int8_t i8 = 0; + uint8_t u8 = 0; + int16_t i16 = 0; + uint16_t u16 = 0; + int32_t i32 = 0; + uint32_t u32 = 0; + int64_t i64 = 0; + uint64_t u64 = 0; + float f32 = 0.0f; + double f64 = 0.0; + std::vector v8{}; + std::vector vf64{}; }; inline bool operator==(const TypeAliasesT &lhs, const TypeAliasesT &rhs) { @@ -2458,7 +2411,7 @@ flatbuffers::Offset CreateTypeAliases(flatbuffers::FlatBufferBuilde } // namespace Example inline InParentNamespaceT *InParentNamespace::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new InParentNamespaceT()); + auto _o = std::unique_ptr(new InParentNamespaceT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2483,7 +2436,7 @@ inline flatbuffers::Offset CreateInParentNamespace(flatbuffer namespace Example2 { inline MonsterT *Monster::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new MonsterT()); + auto _o = std::unique_ptr(new MonsterT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2510,7 +2463,7 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder namespace Example { inline TestSimpleTableWithEnumT *TestSimpleTableWithEnum::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new TestSimpleTableWithEnumT()); + auto _o = std::unique_ptr(new TestSimpleTableWithEnumT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2536,7 +2489,7 @@ inline flatbuffers::Offset CreateTestSimpleTableWithEnu } inline StatT *Stat::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new StatT()); + auto _o = std::unique_ptr(new StatT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2568,7 +2521,7 @@ inline flatbuffers::Offset CreateStat(flatbuffers::FlatBufferBuilder &_fbb } inline ReferrableT *Referrable::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new ReferrableT()); + auto _o = std::unique_ptr(new ReferrableT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2594,7 +2547,7 @@ inline flatbuffers::Offset CreateReferrable(flatbuffers::FlatBufferB } inline MonsterT *Monster::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new MonsterT()); + auto _o = std::unique_ptr(new MonsterT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2771,7 +2724,7 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder } inline TypeAliasesT *TypeAliases::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new TypeAliasesT()); + auto _o = std::unique_ptr(new TypeAliasesT()); UnPackTo(_o.get(), _resolver); return _o.release(); } diff --git a/tests/namespace_test/namespace_test1_generated.h b/tests/namespace_test/namespace_test1_generated.h index 5ec21f81a..9201f8ce5 100644 --- a/tests/namespace_test/namespace_test1_generated.h +++ b/tests/namespace_test/namespace_test1_generated.h @@ -24,7 +24,7 @@ inline const flatbuffers::TypeTable *TableInNestedNSTypeTable(); inline const flatbuffers::TypeTable *StructInNestedNSTypeTable(); -enum EnumInNestedNS { +enum EnumInNestedNS : int8_t { EnumInNestedNS_A = 0, EnumInNestedNS_B = 1, EnumInNestedNS_C = 2, @@ -108,10 +108,7 @@ struct TableInNestedNST : public flatbuffers::NativeTable { static FLATBUFFERS_CONSTEXPR const char *GetFullyQualifiedName() { return "NamespaceA.NamespaceB.TableInNestedNST"; } - int32_t foo; - TableInNestedNST() - : foo(0) { - } + int32_t foo = 0; }; inline bool operator==(const TableInNestedNST &lhs, const TableInNestedNST &rhs) { @@ -181,7 +178,7 @@ inline flatbuffers::Offset CreateTableInNestedNS( flatbuffers::Offset CreateTableInNestedNS(flatbuffers::FlatBufferBuilder &_fbb, const TableInNestedNST *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); inline TableInNestedNST *TableInNestedNS::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new TableInNestedNST()); + auto _o = std::unique_ptr(new TableInNestedNST()); UnPackTo(_o.get(), _resolver); return _o.release(); } diff --git a/tests/namespace_test/namespace_test2_generated.h b/tests/namespace_test/namespace_test2_generated.h index 9c0a1b6cf..df8f959ce 100644 --- a/tests/namespace_test/namespace_test2_generated.h +++ b/tests/namespace_test/namespace_test2_generated.h @@ -62,12 +62,9 @@ struct TableInFirstNST : public flatbuffers::NativeTable { static FLATBUFFERS_CONSTEXPR const char *GetFullyQualifiedName() { return "NamespaceA.TableInFirstNST"; } - flatbuffers::unique_ptr foo_table; - NamespaceA::NamespaceB::EnumInNestedNS foo_enum; - flatbuffers::unique_ptr foo_struct; - TableInFirstNST() - : foo_enum(NamespaceA::NamespaceB::EnumInNestedNS_A) { - } + flatbuffers::unique_ptr foo_table{}; + NamespaceA::NamespaceB::EnumInNestedNS foo_enum = NamespaceA::NamespaceB::EnumInNestedNS_A; + flatbuffers::unique_ptr foo_struct{}; }; inline bool operator==(const TableInFirstNST &lhs, const TableInFirstNST &rhs) { @@ -174,10 +171,8 @@ struct TableInCT : public flatbuffers::NativeTable { static FLATBUFFERS_CONSTEXPR const char *GetFullyQualifiedName() { return "NamespaceC.TableInCT"; } - flatbuffers::unique_ptr refer_to_a1; - flatbuffers::unique_ptr refer_to_a2; - TableInCT() { - } + flatbuffers::unique_ptr refer_to_a1{}; + flatbuffers::unique_ptr refer_to_a2{}; }; inline bool operator==(const TableInCT &lhs, const TableInCT &rhs) { @@ -271,9 +266,7 @@ struct SecondTableInAT : public flatbuffers::NativeTable { static FLATBUFFERS_CONSTEXPR const char *GetFullyQualifiedName() { return "NamespaceA.SecondTableInAT"; } - flatbuffers::unique_ptr refer_to_c; - SecondTableInAT() { - } + flatbuffers::unique_ptr refer_to_c{}; }; inline bool operator==(const SecondTableInAT &lhs, const SecondTableInAT &rhs) { @@ -344,7 +337,7 @@ inline flatbuffers::Offset CreateSecondTableInA( flatbuffers::Offset CreateSecondTableInA(flatbuffers::FlatBufferBuilder &_fbb, const SecondTableInAT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); inline TableInFirstNST *TableInFirstNS::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new TableInFirstNST()); + auto _o = std::unique_ptr(new TableInFirstNST()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -380,7 +373,7 @@ inline flatbuffers::Offset CreateTableInFirstNS(flatbuffers::Fla namespace NamespaceC { inline TableInCT *TableInC::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new TableInCT()); + auto _o = std::unique_ptr(new TableInCT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -413,7 +406,7 @@ inline flatbuffers::Offset CreateTableInC(flatbuffers::FlatBufferBuild namespace NamespaceA { inline SecondTableInAT *SecondTableInA::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new SecondTableInAT()); + auto _o = std::unique_ptr(new SecondTableInAT()); UnPackTo(_o.get(), _resolver); return _o.release(); } diff --git a/tests/native_type_test_generated.h b/tests/native_type_test_generated.h index e504c926d..0fa959e25 100644 --- a/tests/native_type_test_generated.h +++ b/tests/native_type_test_generated.h @@ -63,9 +63,7 @@ FLATBUFFERS_STRUCT_END(Vector3D, 12); struct ApplicationDataT : public flatbuffers::NativeTable { typedef ApplicationData TableType; - std::vector vectors; - ApplicationDataT() { - } + std::vector vectors{}; }; struct ApplicationData FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { @@ -132,7 +130,7 @@ inline flatbuffers::Offset CreateApplicationDataDirect( flatbuffers::Offset CreateApplicationData(flatbuffers::FlatBufferBuilder &_fbb, const ApplicationDataT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); inline ApplicationDataT *ApplicationData::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new ApplicationDataT()); + auto _o = std::unique_ptr(new ApplicationDataT()); UnPackTo(_o.get(), _resolver); return _o.release(); } diff --git a/tests/optional_scalars_generated.h b/tests/optional_scalars_generated.h index e7c7fc123..963bfa4b2 100644 --- a/tests/optional_scalars_generated.h +++ b/tests/optional_scalars_generated.h @@ -17,7 +17,7 @@ bool operator!=(const ScalarStuffT &lhs, const ScalarStuffT &rhs); inline const flatbuffers::TypeTable *ScalarStuffTypeTable(); -enum OptionalByte { +enum OptionalByte : int8_t { OptionalByte_None = 0, OptionalByte_One = 1, OptionalByte_Two = 2, @@ -52,80 +52,42 @@ inline const char *EnumNameOptionalByte(OptionalByte e) { struct ScalarStuffT : public flatbuffers::NativeTable { typedef ScalarStuff TableType; - int8_t just_i8; - flatbuffers::Optional maybe_i8; - int8_t default_i8; - uint8_t just_u8; - flatbuffers::Optional maybe_u8; - uint8_t default_u8; - int16_t just_i16; - flatbuffers::Optional maybe_i16; - int16_t default_i16; - uint16_t just_u16; - flatbuffers::Optional maybe_u16; - uint16_t default_u16; - int32_t just_i32; - flatbuffers::Optional maybe_i32; - int32_t default_i32; - uint32_t just_u32; - flatbuffers::Optional maybe_u32; - uint32_t default_u32; - int64_t just_i64; - flatbuffers::Optional maybe_i64; - int64_t default_i64; - uint64_t just_u64; - flatbuffers::Optional maybe_u64; - uint64_t default_u64; - float just_f32; - flatbuffers::Optional maybe_f32; - float default_f32; - double just_f64; - flatbuffers::Optional maybe_f64; - double default_f64; - bool just_bool; - flatbuffers::Optional maybe_bool; - bool default_bool; - optional_scalars::OptionalByte just_enum; - flatbuffers::Optional maybe_enum; - optional_scalars::OptionalByte default_enum; - ScalarStuffT() - : just_i8(0), - maybe_i8(flatbuffers::nullopt), - default_i8(42), - just_u8(0), - maybe_u8(flatbuffers::nullopt), - default_u8(42), - just_i16(0), - maybe_i16(flatbuffers::nullopt), - default_i16(42), - just_u16(0), - maybe_u16(flatbuffers::nullopt), - default_u16(42), - just_i32(0), - maybe_i32(flatbuffers::nullopt), - default_i32(42), - just_u32(0), - maybe_u32(flatbuffers::nullopt), - default_u32(42), - just_i64(0), - maybe_i64(flatbuffers::nullopt), - default_i64(42LL), - just_u64(0), - maybe_u64(flatbuffers::nullopt), - default_u64(42ULL), - just_f32(0.0f), - maybe_f32(flatbuffers::nullopt), - default_f32(42.0f), - just_f64(0.0), - maybe_f64(flatbuffers::nullopt), - default_f64(42.0), - just_bool(false), - maybe_bool(flatbuffers::nullopt), - default_bool(true), - just_enum(optional_scalars::OptionalByte_None), - maybe_enum(flatbuffers::nullopt), - default_enum(optional_scalars::OptionalByte_One) { - } + int8_t just_i8 = 0; + flatbuffers::Optional maybe_i8 = flatbuffers::nullopt; + int8_t default_i8 = 42; + uint8_t just_u8 = 0; + flatbuffers::Optional maybe_u8 = flatbuffers::nullopt; + uint8_t default_u8 = 42; + int16_t just_i16 = 0; + flatbuffers::Optional maybe_i16 = flatbuffers::nullopt; + int16_t default_i16 = 42; + uint16_t just_u16 = 0; + flatbuffers::Optional maybe_u16 = flatbuffers::nullopt; + uint16_t default_u16 = 42; + int32_t just_i32 = 0; + flatbuffers::Optional maybe_i32 = flatbuffers::nullopt; + int32_t default_i32 = 42; + uint32_t just_u32 = 0; + flatbuffers::Optional maybe_u32 = flatbuffers::nullopt; + uint32_t default_u32 = 42; + int64_t just_i64 = 0; + flatbuffers::Optional maybe_i64 = flatbuffers::nullopt; + int64_t default_i64 = 42LL; + uint64_t just_u64 = 0; + flatbuffers::Optional maybe_u64 = flatbuffers::nullopt; + uint64_t default_u64 = 42ULL; + float just_f32 = 0.0f; + flatbuffers::Optional maybe_f32 = flatbuffers::nullopt; + float default_f32 = 42.0f; + double just_f64 = 0.0; + flatbuffers::Optional maybe_f64 = flatbuffers::nullopt; + double default_f64 = 42.0; + bool just_bool = false; + flatbuffers::Optional maybe_bool = flatbuffers::nullopt; + bool default_bool = true; + optional_scalars::OptionalByte just_enum = optional_scalars::OptionalByte_None; + flatbuffers::Optional maybe_enum = flatbuffers::nullopt; + optional_scalars::OptionalByte default_enum = optional_scalars::OptionalByte_One; }; inline bool operator==(const ScalarStuffT &lhs, const ScalarStuffT &rhs) { @@ -682,7 +644,7 @@ inline flatbuffers::Offset CreateScalarStuff( flatbuffers::Offset CreateScalarStuff(flatbuffers::FlatBufferBuilder &_fbb, const ScalarStuffT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); inline ScalarStuffT *ScalarStuff::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new ScalarStuffT()); + auto _o = std::unique_ptr(new ScalarStuffT()); UnPackTo(_o.get(), _resolver); return _o.release(); } diff --git a/tests/test.cpp b/tests/test.cpp index c11053c56..65fa32254 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -33,9 +33,9 @@ #include "namespace_test/namespace_test1_generated.h" #include "namespace_test/namespace_test2_generated.h" #include "union_vector/union_vector_generated.h" -#include "monster_extra_generated.h" #include "optional_scalars_generated.h" #if !defined(_MSC_VER) || _MSC_VER >= 1700 +# include "monster_extra_generated.h" # include "arrays_test_generated.h" # include "evolution_test/evolution_v1_generated.h" # include "evolution_test/evolution_v2_generated.h" diff --git a/tests/union_vector/union_vector_generated.h b/tests/union_vector/union_vector_generated.h index e6c797127..c819c98ad 100644 --- a/tests/union_vector/union_vector_generated.h +++ b/tests/union_vector/union_vector_generated.h @@ -35,7 +35,7 @@ inline const flatbuffers::TypeTable *BookReaderTypeTable(); inline const flatbuffers::TypeTable *MovieTypeTable(); -enum Character { +enum Character : uint8_t { Character_NONE = 0, Character_MuLan = 1, Character_Rapunzel = 2, @@ -271,10 +271,7 @@ struct AttackerT : public flatbuffers::NativeTable { static FLATBUFFERS_CONSTEXPR const char *GetFullyQualifiedName() { return "AttackerT"; } - int32_t sword_attack_damage; - AttackerT() - : sword_attack_damage(0) { - } + int32_t sword_attack_damage = 0; }; inline bool operator==(const AttackerT &lhs, const AttackerT &rhs) { @@ -348,10 +345,8 @@ struct MovieT : public flatbuffers::NativeTable { static FLATBUFFERS_CONSTEXPR const char *GetFullyQualifiedName() { return "MovieT"; } - CharacterUnion main_character; - std::vector characters; - MovieT() { - } + CharacterUnion main_character{}; + std::vector characters{}; }; inline bool operator==(const MovieT &lhs, const MovieT &rhs) { @@ -496,7 +491,7 @@ inline flatbuffers::Offset CreateMovieDirect( flatbuffers::Offset CreateMovie(flatbuffers::FlatBufferBuilder &_fbb, const MovieT *_o, const flatbuffers::rehasher_function_t *_rehasher = nullptr); inline AttackerT *Attacker::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new AttackerT()); + auto _o = std::unique_ptr(new AttackerT()); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -522,7 +517,7 @@ inline flatbuffers::Offset CreateAttacker(flatbuffers::FlatBufferBuild } inline MovieT *Movie::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - flatbuffers::unique_ptr _o = flatbuffers::unique_ptr(new MovieT()); + auto _o = std::unique_ptr(new MovieT()); UnPackTo(_o.get(), _resolver); return _o.release(); }