diff --git a/include/flatbuffers/reflection.h b/include/flatbuffers/reflection.h
index 580ae62..70d9971 100644
--- a/include/flatbuffers/reflection.h
+++ b/include/flatbuffers/reflection.h
@@ -46,7 +46,30 @@
 // Size of a basic type, don't use with structs.
 inline size_t GetTypeSize(reflection::BaseType base_type) {
   // This needs to correspond to the BaseType enum.
-  static size_t sizes[] = { 0, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8, 4, 8, 4, 4, 4, 4 };
+  static size_t sizes[] = {
+    0, // None
+    1, // UType
+    1, // Bool
+    1, // Byte
+    1, // UByte
+    2, // Short
+    2, // UShort
+    4, // Int
+    4, // UInt
+    8, // Long
+    8, // ULong
+    4, // Float
+    8, // Double
+    4, // String
+    4, // Vector
+    4, // Obj
+    4, // Union
+    0, // Array. Only used in structs. 0 was chosen to prevent out-of-bounds errors.
+
+    0  // MaxBaseType. This must be kept the last entry in this array.
+    };
+  static_assert(sizeof(sizes) / sizeof(size_t) == reflection::MaxBaseType + 1,
+                "Size of sizes[] array does not match the count of BaseType enum values.");
   return sizes[base_type];
 }
 
@@ -228,7 +251,7 @@
 template<typename T>
 T *GetAnyVectorElemPointer(const VectorOfAny *vec, size_t i) {
   auto elem_ptr = vec->Data() + sizeof(uoffset_t) * i;
-  return reinterpret_cast<T*>(elem_ptr + ReadScalar<uoffset_t>(elem_ptr));
+  return reinterpret_cast<T *>(elem_ptr + ReadScalar<uoffset_t>(elem_ptr));
 }
 
 // Get the inline-address of a vector element. Useful for Structs (pass Struct
@@ -362,7 +385,6 @@
         reinterpret_cast<uint8_t *>(flatbuffers::vector_data(vec_)) + offset_);
   }
   T *operator->() const { return operator*(); }
-  void operator=(const pointer_inside_vector &piv);
 
  private:
   size_t offset_;
@@ -470,7 +492,8 @@
 // buf should point to the start of flatbuffer data.
 // length specifies the size of the flatbuffer data.
 bool Verify(const reflection::Schema &schema, const reflection::Object &root,
-            const uint8_t *buf, size_t length);
+            const uint8_t *buf, size_t length, uoffset_t max_depth = 64,
+            uoffset_t max_tables = 1000000);
 
 }  // namespace flatbuffers
 
