diff --git a/include/flatbuffers/idl.h b/include/flatbuffers/idl.h
index aab4b8fa64580844aa5106173ea89fd544694447..898b4104455a6a65c149cc429a236e3fef556555 100644
--- a/include/flatbuffers/idl.h
+++ b/include/flatbuffers/idl.h
@@ -578,6 +578,7 @@ private:
                                        BaseType baseType);
 
  public:
+  SymbolTable<Type> types_;
   SymbolTable<StructDef> structs_;
   SymbolTable<EnumDef> enums_;
   SymbolTable<ServiceDef> services_;
diff --git a/src/idl_parser.cpp b/src/idl_parser.cpp
index fa7b98bf5a4e770137c856420d17c369e4fc1223..5974d044c82be14e3d0087b6952cc187b03318c3 100644
--- a/src/idl_parser.cpp
+++ b/src/idl_parser.cpp
@@ -1314,6 +1314,8 @@ CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) {
     }
   }
   if (dest) *dest = &enum_def;
+  types_.Add(namespaces_.back()->GetFullyQualifiedName(enum_def.name),
+             new Type(BASE_TYPE_UNION, nullptr, &enum_def));
   return NoError();
 }
 
@@ -1419,6 +1421,8 @@ CheckedError Parser::ParseDecl() {
   ECHECK(CheckClash(fields, struct_def, "_byte_vector", BASE_TYPE_STRING));
   ECHECK(CheckClash(fields, struct_def, "ByteVector", BASE_TYPE_STRING));
   EXPECT('}');
+  types_.Add(namespaces_.back()->GetFullyQualifiedName(struct_def->name),
+             new Type(BASE_TYPE_STRUCT, struct_def, nullptr));
   return NoError();
 }
 
diff --git a/tests/union_vector/union_vector_generated.h b/tests/union_vector/union_vector_generated.h
index 180b3d99a86ba2b488324baccbc706e29f4ade45..560860c62233096dd47f47775ff45d29ae1a0103 100644
--- a/tests/union_vector/union_vector_generated.h
+++ b/tests/union_vector/union_vector_generated.h
@@ -266,8 +266,8 @@ inline bool VerifyCharacterVector(flatbuffers::Verifier &verifier, const flatbuf
   if (values->size() != types->size()) return false;
   for (flatbuffers::uoffset_t i = 0; i < values->size(); ++i) {
     if (!VerifyCharacter(
-        verifier,  values->Get(i), types->GetEnum<Character>(i))) { 
-      return false; 
+        verifier,  values->Get(i), types->GetEnum<Character>(i))) {
+      return false;
     }
   }
   return true;