#include "required_table_default_test.h" #include "required_table_default_test_generated.h" #include "test_assert.h" namespace flatbuffers { namespace tests { // Exercises the (required) table-field default member initializer added to // GenMember() in idl_gen_cpp.cpp: a `(required)` table field can never // legally be missing once Pack()/Verify() succeed, so a plain native default // constructor must not leave it null - callers should never have to // remember to allocate it themselves before the first Pack(). The sibling // `optional_inner` field (same type, no `required`) is checked alongside it // to confirm the change is scoped to required fields only. void RequiredTableDefaultTest() { using RequiredTableDefaultTestNS::Holder; using RequiredTableDefaultTestNS::HolderT; HolderT src; TEST_NOTNULL(src.required_inner.get()); TEST_NULL(src.optional_inner.get()); // Never manually allocated required_inner - only relying on the default // constructor above - yet Pack() must still succeed and round-trip it. src.required_inner->value = 42; flatbuffers::FlatBufferBuilder fbb; fbb.Finish(Holder::Pack(fbb, &src)); auto dst = RequiredTableDefaultTestNS::UnPackHolder(fbb.GetBufferPointer()); TEST_NOTNULL(dst->required_inner.get()); TEST_EQ(dst->required_inner->value, 42u); TEST_NULL(dst->optional_inner.get()); } } // namespace tests } // namespace flatbuffers