Fix Visual Studio 2017 new warning (C4244: 'argument': conversion fro… (#4261)

* Fix Visual Studio 2017 new warning (C4244: 'argument': conversion from 'int' to 'const char', possible loss of data)

* Fix Visual Studio 2017 pedantic warnings

* Fix Visual Studio 2017 pedantic warnings
diff --git a/include/flatbuffers/util.h b/include/flatbuffers/util.h
index 2bd0ae0..008b186 100644
--- a/include/flatbuffers/util.h
+++ b/include/flatbuffers/util.h
@@ -114,6 +114,11 @@
   #endif
 }
 
+// Pedantic warning free version of toupper().
+inline char ToUpper(char c) {
+  return static_cast<char>(::toupper(c));
+}
+
 typedef bool (*LoadFileFunction)(const char *filename, bool binary,
                                  std::string *dest);
 typedef bool (*FileExistsFunction)(const char *filename);
diff --git a/src/idl_gen_cpp.cpp b/src/idl_gen_cpp.cpp
index 521ca8f..95c5d71 100644
--- a/src/idl_gen_cpp.cpp
+++ b/src/idl_gen_cpp.cpp
@@ -54,7 +54,7 @@
       guard += *it + "_";
     }
     guard += "H_";
-    std::transform(guard.begin(), guard.end(), guard.begin(), ::toupper);
+    std::transform(guard.begin(), guard.end(), guard.begin(), ToUpper);
     return guard;
   }
 
@@ -852,7 +852,7 @@
 
   std::string GenFieldOffsetName(const FieldDef &field) {
     std::string uname = field.name;
-    std::transform(uname.begin(), uname.end(), uname.begin(), ::toupper);
+    std::transform(uname.begin(), uname.end(), uname.begin(), ToUpper);
     return "VT_" + uname;
   }
 
diff --git a/tests/test.cpp b/tests/test.cpp
index 8011a11..262562a 100644
--- a/tests/test.cpp
+++ b/tests/test.cpp
@@ -261,7 +261,7 @@
   // Test accessing a vector of sorted structs
   auto vecofstructs = monster->testarrayofsortedstruct();
   if (vecofstructs) {  // not filled in monster_test.bfbs
-    for (size_t i = 0; i < vecofstructs->size()-1; i++) {
+    for (flatbuffers::uoffset_t i = 0; i < vecofstructs->size()-1; i++) {
       auto left = vecofstructs->Get(i);
       auto right = vecofstructs->Get(i+1);
       TEST_EQ(true, (left->KeyCompareLessThan(right)));