diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 57010f530..ce10a4e46 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -2714,24 +2714,28 @@ class CppGenerator : public BaseGenerator { code_.SetValue("STRUCT_NAME", Name(struct_def)); code_.SetValue("NATIVE_NAME", NativeName(Name(struct_def), &struct_def, opts_)); - auto native_name = - NativeName(WrapInNameSpace(struct_def), &struct_def, parser_.opts); - code_.SetValue("POINTER_TYPE", - GenTypeNativePtr(native_name, nullptr, false)); if (opts_.generate_object_based_api) { // Generate the X::UnPack() method. code_ += "inline " + TableUnPackSignature(struct_def, false, opts_) + " {"; - code_ += - " {{POINTER_TYPE}} _o = {{POINTER_TYPE}}(new {{NATIVE_NAME}}());"; + if(opts_.g_cpp_std == cpp::CPP_STD_X0) { + auto native_name = + NativeName(WrapInNameSpace(struct_def), &struct_def, parser_.opts); + code_.SetValue("POINTER_TYPE", + GenTypeNativePtr(native_name, nullptr, false)); + code_ += + " {{POINTER_TYPE}} _o = {{POINTER_TYPE}}(new {{NATIVE_NAME}}());"; + } else if(opts_.g_cpp_std == cpp::CPP_STD_11) { + code_ += " auto _o = std::unique_ptr<{{NATIVE_NAME}}>(new {{NATIVE_NAME}}());"; + } else { + code_ += " auto _o = std::make_unique<{{NATIVE_NAME}}>();"; + } code_ += " UnPackTo(_o.get(), _resolver);"; code_ += " return _o.release();"; - code_ += "}"; code_ += ""; - code_ += "inline " + TableUnPackToSignature(struct_def, false, opts_) + " {"; code_ += " (void)_o;"; diff --git a/tests/cpp17/generated_cpp17/monster_test_generated.h b/tests/cpp17/generated_cpp17/monster_test_generated.h index c8fbb2549..654fc19de 100644 --- a/tests/cpp17/generated_cpp17/monster_test_generated.h +++ b/tests/cpp17/generated_cpp17/monster_test_generated.h @@ -2197,7 +2197,7 @@ flatbuffers::Offset CreateTypeAliases(flatbuffers::FlatBufferBuilde } // namespace Example inline InParentNamespaceT *InParentNamespace::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - std::unique_ptr _o = std::unique_ptr(new InParentNamespaceT()); + auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2222,7 +2222,7 @@ inline flatbuffers::Offset CreateInParentNamespace(flatbuffer namespace Example2 { inline MonsterT *Monster::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - std::unique_ptr _o = std::unique_ptr(new MonsterT()); + auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2249,7 +2249,7 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder namespace Example { inline TestSimpleTableWithEnumT *TestSimpleTableWithEnum::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - std::unique_ptr _o = std::unique_ptr(new TestSimpleTableWithEnumT()); + auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2275,7 +2275,7 @@ inline flatbuffers::Offset CreateTestSimpleTableWithEnu } inline StatT *Stat::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - std::unique_ptr _o = std::unique_ptr(new StatT()); + auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2307,7 +2307,7 @@ inline flatbuffers::Offset CreateStat(flatbuffers::FlatBufferBuilder &_fbb } inline ReferrableT *Referrable::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - std::unique_ptr _o = std::unique_ptr(new ReferrableT()); + auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2333,7 +2333,7 @@ inline flatbuffers::Offset CreateReferrable(flatbuffers::FlatBufferB } inline MonsterT *Monster::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - std::unique_ptr _o = std::unique_ptr(new MonsterT()); + auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); return _o.release(); } @@ -2507,7 +2507,7 @@ inline flatbuffers::Offset CreateMonster(flatbuffers::FlatBufferBuilder } inline TypeAliasesT *TypeAliases::UnPack(const flatbuffers::resolver_function_t *_resolver) const { - std::unique_ptr _o = std::unique_ptr(new TypeAliasesT()); + auto _o = std::make_unique(); UnPackTo(_o.get(), _resolver); return _o.release(); }