diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp index 329e28a2f853fedaf0c722d1e22bf780e78e7365..c21f6b315291b398d74748046d9b9fdc5a247cb4 100644 --- a/src/idl_gen_cpp.cpp +++ b/src/idl_gen_cpp.cpp @@ -1618,14 +1618,14 @@ class CppGenerator : public BaseGenerator { NumToString((*id)++) + "__;"; } - static void PaddingDeclaration(int bits, std::string *code_ptr, int *id) { + static void PaddingInitializer(int bits, std::string *code_ptr, int *id) { (void)bits; - *code_ptr += "(void)padding" + NumToString((*id)++) + "__;"; + *code_ptr += ",\n padding" + NumToString((*id)++) + "__(0)"; } - static void PaddingInitializer(int bits, std::string *code_ptr, int *id) { + static void PaddingNoop(int bits, std::string *code_ptr, int *id) { (void)bits; - *code_ptr += ",\n padding" + NumToString((*id)++) + "__(0)"; + *code_ptr += " (void)padding" + NumToString((*id)++) + "__;"; } // Generate an accessor struct with constructor for a flatbuffers struct. @@ -1704,20 +1704,20 @@ class CppGenerator : public BaseGenerator { } } - padding_id = 0; - std::string padding_list; - for (auto it = struct_def.fields.vec.begin(); - it != struct_def.fields.vec.end(); ++it) { - auto field = *it; - GenPadding(*field, &padding_list, &padding_id, PaddingDeclaration); - } - code_.SetValue("ARG_LIST", arg_list); code_.SetValue("INIT_LIST", init_list); - code_.SetValue("PADDING_LIST", padding_list); code_ += " {{STRUCT_NAME}}({{ARG_LIST}})"; code_ += " : {{INIT_LIST}} {"; - if (padding_list.length()) code_ += " {{PADDING_LIST}}"; + padding_id = 0; + for (auto it = struct_def.fields.vec.begin(); + it != struct_def.fields.vec.end(); ++it) { + const auto &field = **it; + if (field.padding) { + std::string padding; + GenPadding(field, &padding, &padding_id, PaddingNoop); + code_ += padding; + } + } code_ += " }"; // Generate accessor methods of the form: diff --git a/tests/monster_test_generated.h b/tests/monster_test_generated.h index d7c80286cbae8d937c264763b008cc3a20e63c2a..be2051816dc0c516c0ec3ed346e3e848d8daa29b 100644 --- a/tests/monster_test_generated.h +++ b/tests/monster_test_generated.h @@ -200,7 +200,9 @@ MANUALLY_ALIGNED_STRUCT(16) Vec3 FLATBUFFERS_FINAL_CLASS { padding1__(0), test3_(_test3), padding2__(0) { - (void)padding0__;(void)padding1__;(void)padding2__; + (void)padding0__; + (void)padding1__; + (void)padding2__; } float x() const { return flatbuffers::EndianScalar(x_);